المشكلة رقم 2:
كل عدد جديد في متتالية فيبوناتشي يتشكل من مجموع العددين السابقين له.
و باستخدام 1 و 2 ستكون 10 العناصر الأولى كالتالي:
1,2,3,5,8,13,21,34,55,89,...
المطلوب:
ابحث عن مجموع الأعداد الزوجية في السلسلة التي لا يتجاوز أكبر عنصر فيها 4 ملايين.
الحل:
الشرح:
1. نقوم بإستعمال متغيرتين a و b. نعطي للأولى 1 كقيمة و للثانية 2 كقيمة.
2. نستعمل متغيرة بإسم fibsum قيمتها في البداية هي 0 و سنستعملها لتخزين مجموع الأعداد الزوجية التي سنكتشفها عند القيام بحساب متتالية فيبوناتشي.
3. سنقوم بإستخدام حلقة while و هذا النوع من الحلقات يستمر في الدوران حول نفسه ما دام الشرط صحيح. الشرط الذي إستخدمناه هو "ما دامت قيمة b أصغر من 4000000"
4. عند كل دورة من دورات الحلقة يتم التحقق من قابلية قسمة قيمة المتغيرة b على 2، و حيث يكون الباقي هو 0
5. إذا كان الشرط صحيحا تتم عملية جمع قيمة b بمجموع قيمة fibsum ثم تحديث هذه الأخيرة بالنتيجة التي حصلنا عليها من عملية الجمع.
6. في السطر الذي يحتوي على a, b = b, a + b يتم إسناد قيمة المتغيرة b إلى a و إسناد مجموع قيمة a+b إلى b في آن واحد.
7. عند الإنتهاء الحلقة من الدوران (عندما يصبح شرطها خاطئا) يتم عرض النتيجة (قيمة المتغيرة fibsum)
هل توصلتم إلى طريقة أخرى؟
كل عدد جديد في متتالية فيبوناتشي يتشكل من مجموع العددين السابقين له.
و باستخدام 1 و 2 ستكون 10 العناصر الأولى كالتالي:
1,2,3,5,8,13,21,34,55,89,...
المطلوب:
ابحث عن مجموع الأعداد الزوجية في السلسلة التي لا يتجاوز أكبر عنصر فيها 4 ملايين.
الحل:
a, b = 1, 2
fibsum = 0
while b <= 4000000:
if b % 2 == 0:
fibsum += b
a, b = b, a + b
print fibsum
fibsum = 0
while b <= 4000000:
if b % 2 == 0:
fibsum += b
a, b = b, a + b
print fibsum
الشرح:
1. نقوم بإستعمال متغيرتين a و b. نعطي للأولى 1 كقيمة و للثانية 2 كقيمة.
2. نستعمل متغيرة بإسم fibsum قيمتها في البداية هي 0 و سنستعملها لتخزين مجموع الأعداد الزوجية التي سنكتشفها عند القيام بحساب متتالية فيبوناتشي.
3. سنقوم بإستخدام حلقة while و هذا النوع من الحلقات يستمر في الدوران حول نفسه ما دام الشرط صحيح. الشرط الذي إستخدمناه هو "ما دامت قيمة b أصغر من 4000000"
4. عند كل دورة من دورات الحلقة يتم التحقق من قابلية قسمة قيمة المتغيرة b على 2، و حيث يكون الباقي هو 0
5. إذا كان الشرط صحيحا تتم عملية جمع قيمة b بمجموع قيمة fibsum ثم تحديث هذه الأخيرة بالنتيجة التي حصلنا عليها من عملية الجمع.
6. في السطر الذي يحتوي على a, b = b, a + b يتم إسناد قيمة المتغيرة b إلى a و إسناد مجموع قيمة a+b إلى b في آن واحد.
7. عند الإنتهاء الحلقة من الدوران (عندما يصبح شرطها خاطئا) يتم عرض النتيجة (قيمة المتغيرة fibsum)
هل توصلتم إلى طريقة أخرى؟
لقد وضعت الحل، هل من أحد يعيد صياغة الحل بلغته المفضلة !؟
ردحذفباستخدام لغة C:
ردحذفint a=1, b, result=0;
for(b=2; b<=4000000; b++)
{
if( b%2==0)
result+=b;
a=b; b=a+b;
}
printf("%i", result);
هناك خطأ صغير في حلي هذا (حسب ما أعتقد)، من يكتشفه :)
@محمد: هذا الكود لم يعطي النتيجة المطلوبة. كذلك لا أعتقد أن الحلقة التسلسلية for صالحة في هذه الحالة لأن قيمة b لا تتدرج على كل السلسلة (من 1 إلى 4 ملايين) بل إن قيمتها الجديدة في كل دورة تساوي نفس قيمتها الحالية بالإضافة إلى قيمة a السابقة.
ردحذف