
شاید شما هم مثل من علاقه مند باشید که بدونید شرکتهای بزرگ نرم افزاری مثل گوگل ، فیسبوک ، مایکروسافت و ... چه چیزایی تو مصاحبه هاشون از برنامه نویس ها میپرسن ! اغلب هم شنیدیم که ابزار برای خیلی از این شرکت ها مهم نیست برخلاف اکثر شرکت های داخل ایران که تو آگهی ها می نویسن برنامه نویس مسلط به فریمورک فلان و بیسار !!! پس چی برای اونا مهمه ؟ خب معلومه الگوریتم ! هرچقدر شما خوش فکر باشید شانس بیشتری برای پذیرفته شدن تو مصاحبه این شرکت ها دارید .
اسم این مجموعه پست ها که امیدوارم ادامه دار هم باشه و گذاشتم The Art Of Programming ، دلیلش هم خب واسه این بود که این کتاب کلا" در رابطه با الگوریتم هست علاوه بر اون جناب کنوث نویسنده این کتاب آدم جالبیه :) .
مسئله #0 به این صورت طرح شده که میگه بعنوان ورودی یک رشته از اعداد داده میشه و خروجی باید بزرگترین مقداری باشه که تنها بوسیله ی عملگرهای * ، + بشه بدست آورد ، مثلا" فرض کنید ورودی باشه
123456 طبیعتا" باید اعداد 2تا 6 جوری ضرب کنیم که آخر سر مقدار ماکسیمم بشه و البته به 1 که تو ضرب عنصر خنثی ایی هستش همینطور 0 هم توجه کنیم ! پس چالش این مسئله توجه به اعداد 0 و 1 هستش .
من پیشنهاد میکنم اول خودتون به مسئله فکر کنید اصلا" کدهای زیر رو هم نگاه نکنید بعدش کد خودتون و با چیزی که من نوشتم مقایسه کنید :)
public static void main(String[] args) { String str = "123456"; int maxNumber = str.charAt(0) - '0'; // جهت بدست آوردن مقدار عدد از کاراکتر اول for (int i = 1; i < str.length(); i++) { int currentNumber = str.charAt(i) - '0'; // بدست آوردن عدد جاری در رشته if (currentNumber == 0 || currentNumber == 1 || maxNumber <= 1) { maxNumber += currentNumber; } else { maxNumber *= currentNumber; } } System.out.println(maxNumber); }
نکته ای که مهم بود در حل این مسئله توجه به اعداد 0 و 1 در ابتدا ، وسط و اخر رشته هست که باید همیشه با مقدار قبلی جمع بشه اگه دقت کنید اولین عدد به متغیر maxNumber اضافه شده و بعد از اینکه از کاراکتر بعدی تا آخر رشته پیمایش میشه توجه میکنیم که مقدار قبلی همیشه عددی بزرگتر از 1 باشه و اگه 0 یا 1 بود همیشه عملگر + برای مقدار قبلی استفاده میشه در غیراینصورت * می کنیم
از پست های این مجموعه :
http://vrgl.ir/jQzrX