تمرين 4 متوسط // من يحله بأبسط طريقة :]

السلام عليكم :)

لنرى من يملك اسرع خوارزمية لحل هذه المسألة

التمرين : لدينا مجموعة من حبات الكرز

  • عندما نجمعها مثنى مثنى تبقى حبة واحدة

  • عندما نجمعها ثلاثي ثلاثي تبقى حبة واحدة

  • عندما نجمعها رباعي رباعي تبقى حبة واحدة

  • عندما نجمعها خماسي خماسي تبقى حبة واحدة

  • عندما نجمعها سداسي سداسي تبقى حبة واحدة

ما هو عدد حبات الكرز ( اذا علمت ان عددها اقل من 100 ) ؟؟ :]

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

مجهول
  • حذف بواسطة المستخدم

سبقك بها عكاشة :) هههههه

مجهول
  • حذف بواسطة المستخدم

في المرة المقبلة ان شاء الله :)

for i in range(7,100):
    if i%2==1 and i%3==1 and i%4==1 and i%5==1 and i%6==1:
         print(i)

في الواقع ليست هذه افضل طريقة

ال Complexity هي

O(N)

واذا تم استعمل LCM

تكون

O(logn)

ال base هي 2 طبعا

يعني مثلا يقول لك اقل من 4 مليون حبة كرز ؟؟

حلك يستلزم 4 مليون iteration

اما باستخدام lcm

log(4000000 ) / log(2)

يعني تقريبا 21 عملية حسابية

طبعا هذا حسب big notation

(Upper bound)

بالبايثون 2:

filter(lambda x: 1==x%3==x%4==x%5==x%6, xrange(1,100,2))

تجد 61، لكن 1 يحقق الشروط أيضا!

سأجيبك بسؤال حتى استطيع الحكم

هل الاجابة عدد صحيح ام عدد عشري؟

=)

وكيف سيكون عدد حبات الكرز عشري °_° ؟؟

صحيح -_-

:]

إذن الاجابة 61

لقد ارجعتني لجدول الضرب ههه

ههههههه جييد

لكن اين الطريقة ؟؟ مفاد التمرين ان نرى اسرع طريقة اليس كذلك ؟ :]

مم تريد طريقة الحل وهي كالتالي :

1- ذهبت الى جدول الضرب.

2- اخرجت العامل المشترك بين الارقام 3 و4 و5 و6 واستثنيت العدد 2 لأنه سيقبل القسمة على اي عدد زوجي.

3- قمت بزيادة العدد 1 على العدد المستنتج.

وخرجت بالنتيجة وهذه الطريقة وصف لكن دماغي اجرى الآلية دون علم مني :)

اهااه انت رجعت الى طريقة الرابعة متوسط ههههه جمييل جدا ما شااء الله :)

ظننت أنك وجدها بالاعتماد على خوارزمية برمجية معينة :]

اخي وصديقي ,

عند حل المشاكل انظر للموضوع من نظرة كليا تختلف عن نظرة المعطيات وستجد الحل

وهذا اسلوب اعتمده منذ القدم, لذلك لم تكن نظرتي برمجية بل كانت نظرة طفل ولهذا السبب سألتك بالبداية إن كان عدد عشري ام صحيح =)

جمييييييييل ما تقوول :)

لكن لو كان لدي مسدس في لحظة سؤالك لكن قد أطلقت عليك =_= ههههههههه

بووركت فاضلي :] كما يبدو اننا تعلما شيء جديد منك :)

والان اين الجائزة ؟

هههههههههه

ايواااا ومن قال ان هناك جائزة ؟؟ ههههههههههه

إن اجبتني على سؤالي سأتنازل عن الجائزة؟

لو علمت ان العدد اكبر من 500 فما سيكون الجواب؟

احم احممم هل ستكون هكذا يا ترى ؟

#include<iostream>

    #include <conio.h>

        using namespace std;

        int main()

        {

        int j=0,max=0,max2=0;

        int a[10];

        for (int i=0;i<10;i++)

        {

        cin>>a[i];

        }

        while (j<10)

        {

        if(a[j]>max) max=a[j];

        j++;

        }

        j=0;

        while (j<10)

        {

        tt: if(a[j]==max ) {j+=1;goto tt;}

        if(a[j]>max2) max2=a[j];

        j++;

        }

        cout<<"the number before max is   "<<max2<<endl;

        cout<<"the max number is  "<<max<<endl;

        getch();

        return 0;



        }
مجهول
  • حذف بواسطة المستخدم
-3

c++ hhhhhhhhhhhhh

541

601

661

721

781

...

المالانهاية :)

ما هو عدد حبات الكرز ( اذا علمت ان عددها اقل من 100 ) ؟؟ :]

نسيت هده الجزئية :)

ahmedsaoud31 أضف ردا

هذا ردي على @ahm_ijal على تعليقه:

الرد على السؤال الأساسي ستجده في التعليق التالي بلغة Go

للتصحيح فقط:

المضاعف المشترك، وليس العامل المشترك

فالعامل المشترك لأي مجموعة من الأعداد: هو العدد الذي تقبل هذه الأعداد القسمة عليه، فمثلًا:

2 هو عامل مشترك للأعداد: 2،4،6،8

ويمكن لمجموعة من الأعداد أن يكون لها أكثر من عامل مشترك،.

أما المضاعف المشترك لمجموعة من الأعداد: هو العدد الذي يقبل القسمة على اي عدد من هذه المجموعة، فمثلًا:

12 هو مضاعف مشترك للأعداد: 2،3،4،4،6،12

ويمكن لمجموعة من الأعداد أن يكون لها أكثر من مضاعف مشترك، وعند توحيد مقامات مجموعة من الكسور نبحث عن المضاعف المشترك الأصغر.

هناك إجابتان

1-حبة واحدة

2- واحد وستون حبة

كود C:

أو يمكن أن يكون بالعلاقة الرياضية lcm(2,3,4,5,6)+1

المهمّ أن ##حبّة واحدة تفي بالمطلوب :)

لنفرض ان عدد حبات الكرز m

يجب ان نجد العدد m الذي يحقق المعادلات الاتية :

2n +1 =m

3n +1 =m

4n +1 =m

5n +1 =m

6n +1 =m

M < 100

هذا تحليل لها ثم نبدا بتجريب معادلتين معا حتى نصل للمعادلة الاخيرة فنجد الجواب وهو 61

بالرياضيات ، أصغر مضاعف مشترك + 1 :

4*5*3+1=61

for i in range(7, 100, 6):
    if i%5 == 1 and i%4 == 1:
        print(i)
for i := 7; i < 100; i=i+6 {
    if i%2 == 1 && i%3 == 1 && i%4 == 1 && i%5 == 1 && i%6 == 1 {
        fmt.Println(i)
    }
}

أعلم أن هناك من سبقني إليها لكن أردت المشاركة الحل بإستخدام جافاسكريبت :

var i=7;
while(i<100){
if(i%2==1 & i%3==1 & i%4==1 & i%5==1 & i%6==1){
alert(i);
}
i++;
}

c++

#include<iostream>;
#include<cmath>;
using namespace std;

int main()
{
    int total=0;
 for(int x=7;x<100;x++)
 {
      if(x%2==1 && x%3==1 && x%4==1 && x%5==1 && x%6==1)
      {
                total = x;          
                break;
      }  
 }

 cout << total;

system("pause"); 
}
عبد الرحمن أحمد أضف ردا
for(int x = 30; x < 100; x += 30)
    if(x % 4 == 0)
    {
        Console.WriteLine(x + 1);
        break;
    }

//Result = 61

الشرح:

نحن نعلم أن العدد ناقص واحد يجب أن يكون من مضاعفات الأعداد المذكورة

وأي عدد مضاعف لأكبرهم وهو 6 فهو مضاعف لقواسمه وهما 2 و 3 ولهذا لا داعي لأخذهم في عملية الفحص

بما أن 5 أولي فأصغر مضاعف له مع 6 هو 5*6 أي 30

الآن نبدأ حلقة مضاعفات 30 ونفحص أيها مضاعف لـ 4 فهو المطلوب

ولهذا في الخوارزمية السابقة سنجد أنه سيصل للمطلوب في المرور الثاني للحلقة