الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لغز حسابى

بدأه عماد حمدي احمد في 25 يونيو 2010 · 21 رد · 4,602 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

أخوانى الأفاضل بارك الله فيكم

هذا لغز حسابى لتنشيط الذاكرة :).

فى المعادلة التاليه

mimetex.cgi?\frac{\boxdot}{\boxdot\boxdo

نريد استبدال كل مربع برقم صحيح موجب من الاقام التاليه 1، 2، 3، 4، 5، 6، 7، 8، 9 بحيث تتحقق المعادلة ، اى يتساوى طرفى المعادلة. بدون استخدام اى رقم اكثر من مرة واحدة. مع العلم بأن مقام كل كسر هو عبارة عن عدد مكون من خانتين احاد وعشرات.

- مدة اللغز ثلاثة أيام.

- يمكنك وضع مشاركة تفيد بوصولك للحل ، وارفاق الحل نفسه برسالة شخصية.

- الحلول البرمجية مقبولة مع ارفاق البرنامج المستخدم.

- التحليل الرياضى للمسألة مرحب به جدا.

- كم حلا يصلح لهذه المسألة؟

بالله التوفيق ،،،

تم تعديل هذه المشاركة بواسطة عماد حمدي احمد في 25 يونيو 2010 في 19:34

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#2

بارك الله فيك اخي د. عماد كان يفضل ان توضح ان المقام عبارة عن عدد واحد من خانتين (ضيعت ساعة على المسألة و توصلت انه لا يوجد لها حل حيث كنت اظن ان المقام عبارة عن حاصل ضرب عددين).

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#3

السلام عليكم ورحمة الله

أخى الفاضل hfsh80

بارك الله فيك اخى على سرعة الرد ، ولكنك لم تترك الفرصة لأى أحد غيرك للتفكير :) مع انى كاتب من شروط اللغز البنود التالية

عماد حمدي احمد كتب:

- مدة اللغز ثلاثة أيام.

- يمكنك وضع مشاركة تفيد بوصولك للحل ، وارفاق الحل نفسه برسالة شخصية.

أخى الفاضل دكتور ابراهيم

ibr_exn كتب:

بارك الله فيك اخي د. عماد كان يفضل ان توضح ان المقام عبارة عن عدد واحد من خانتين (ضيعت ساعة على المسألة و توصلت انه لا يوجد لها حل حيث كنت اظن ان المقام عبارة عن حاصل ضرب عددين).

اعتذر والله , ظننت انها ستفهم تلقائيا ، لكن يبدوا فعلا انه كان يجب التنويه الى ذلك :) معذرة :)

بالله التوفيق ،،،

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#4

أعتذر لك أستاذي الفاضل عماد حمدي احمد

فهمت أن الحلول تعرض خلال هذه الأيام الثلاثة .

أعتذر مرة أخرى وتقبل احترامي

#5
hfsh80 كتب:

فهمت أن الحلول تعرض خلال هذه الأيام الثلاثة .

أعتذر مرة أخرى وتقبل احترامي

بارك الله فيك اخى الكريم ، وشكرا على سعة صدرك :)

اتمنى اخونا دكتور ابراهيم يقوم بإخفاء الحلول لترك الفرصة لباقى الأعضاء.

بالله التوفيق ،،،

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#6

أستاذي، هل التوصل إلى حل مسألة كهذه يكون بتجريب الأعداد أم باتباع طريقة رياضية ما؟

جزاك الله خيراً

هذه الجملة خاطئة  :wacko: 


#7

أخي عماد .... أرجو تفقّد رسائلك ...

بالتوفيق

#8
Abboodd كتب:

هل التوصل إلى حل مسألة كهذه يكون بتجريب الأعداد أم باتباع طريقة رياضية ما؟

بارك الله فيك اخى الفاضل ، واتمنى اكون عند حسن ظنك بى. نعم حل المسألة يتم بتجريب الأعداد (باستخدام برنامج مثلا) ولكن يمكن استخدام الرياضيات لتقليل عدد التجريبات :)

Devd كتب:

أخي عماد .... أرجو تفقّد رسائلك ...

بارك الله فيك اخى الكريم ، وصلت الرسالة ، تفقد رسائلك ،،،

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#9

انا بعتلك الحل يا دكتور عماد

#10
Usama Fayez كتب:

انا بعتلك الحل يا دكتور عماد

وصلت رسالتك أخى الفاضل ، راجع رسائلك :) ،،،

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#11

قربت من الحل :)

A man who wants to lead the orchestra must turn his back on the crowd

#12
0xAli كتب:

قربت من الحل :)

بارك الله فيك أخى الكريم ، منتظر رسالة حضرتك بالحل ان شاء الله :)

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#13

السلام عليكم ورحمة الله

الأخوة الأفاضل بارك الله فيكم

طبعا مش محتاج اقول ان المنتدى يضم بين جنباته مجموعه من الموهوبين :) ، فقد توصل عدد من الإخوة الأفاضل الى حل اللغز بسهولة ويسر وهو امر عادى بالنسبة لأمثالهم :)

عامة حل اللغز هو mimetex.cgi?\frac{5}{34}+\frac{7}{68}+ \

وقد توصل كل من الإخوة الأتى اسماءهم الى الحل الصحيح باستخدام برامج بلغات برمجه مختلفة

- الأخ الفاضل hfsh80

- الأخ الفاضل Devd

- الأخ الفاضل Usama Fayez

وكذلك وصلتنى رسالة من الأخ الفاضل aohammed تفيد بمحاولته لإيجاد الحل ، ولكن للاسف لم يتوصل فعليا للحل المطلوب.

أما اخونا الفاضل 0xAli وأخونا الفاضل Abboodd فيبدوا انهما يحاولان فى اللغز ولكن الى الأن لم يصلنى اى حلول منهما.

اتمنى من الإخوة الأفاضل وضع برامجهم التى استخدموها فى الوصول للحل ، وذلك لنتناقش بشأنها.

بارك الله فيكم وبارك لكم ،،،

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#14

الحل لم يكن أبداً واحد صحيح أقرب رقم وصلتله هو

1.0x

هذه أول مسابقة من النوع/المجال هذا فإعذروني :unsure:

A man who wants to lead the orchestra must turn his back on the crowd

#15

السلام عليكم ...

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

بالاضافة الى الكود المرفق بلغة vb6 ...

clipygq.jpg

بالتوفيق أخي ...ومشكور على المسألة

keys.rar

1
#16

عرفت خطأي الآن, إفترضت أن الأُس هو 9 8 7 :wacko:

A man who wants to lead the orchestra must turn his back on the crowd

#17

السلام عليكم

فكرني في الحل هي أن لدينا 9 أرقم من 1 إلى 9 نريد توزيعها على 9 أماكن وبدون تكرار هذا يعني أن عدد الاحتمالات لدينا هو مضروب 9 يعني 362880 احتمال !

كنت قد ادرجت الحل في وقت سابق لكن عدلت في الكود لتسريع العملية والغاء الاحتمالات الغير مقبوله .

الكود مكتوب بلغة C# وهو يعتمد بفكرته على 9 حلقات تكرار متداخلة لايجاد كل رقم محتمل على حده . سأدرج الكود هنا حتى يتمكن أي شخص يملك مصرف اللغة من استخدامها بغض النظر عن الاصدار لديه :

            decimal a1, a2, a3, a4, a5, a6, a7, a8, a9;
            decimal n1, n2, n3;

            for (a1 = 1; a1 < 10; a1++)
            {
                for (a2 = 1; a2 < 10; a2++)
                {

                    if (a2 == a1) continue;

                    for (a3 = 1; a3 < 10; a3++)
                    {

                        if (a3 == a1 || a3 == a2) continue;

                        for (a4 = 1; a4 < 10; a4++)
                        {

                            if (a4 == a1 || a4 == a2 || a4 == a3) continue;

                            for (a5 = 1; a5 < 10; a5++)
                            {

                                if (a5 == a1 || a5 == a2 || a5 == a3 || a5 == a4) continue;

                                for (a6 = 1; a6 < 10; a6++)
                                {

                                    if (a6 == a1 || a6 == a2 || a6 == a3 || a6 == a4 || a6 == a5) continue;

                                    for (a7 = 1; a7 < 10; a7++)
                                    {

                                        if (a7 == a1 || a7 == a2 || a7 == a3 || a7 == a4 || a7 == a5 || a7 == a6) continue;

                                        for (a8 = 1; a8 < 10; a8++)
                                        {

                                            if (a8 == a1 || a8 == a2 || a8 == a3 || a8 == a4 || a8 == a5 || a8 == a6 || a8 == a7) continue;

                                            for (a9 = 1; a9 < 10; a9++)
                                            {
                                                if (a9 == a1 || a9 == a2 || a9 == a3 || a9 == a4 || a9 == a5 || a9 == a6 || a9 == a7 || a9 == a8) continue;

                                                n1 = a1 / (a2 + a3 * 10);
                                                n2 = a4 / (a5 + a6 * 10);
                                                n3 = a7 / (a8 + a9 * 10);

                                                if (n1+n2+n3==1)
                                                {
                                                    Console.WriteLine(a1 + "/" + (a2 + a3 * 10) + "+" + a4 + "/" + (a5 + a6 * 10) + "+" + a7 + "/" + (a8 + a9 * 10));
                                                    Console.WriteLine("---------------------");
                                                }


                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

الملف بعد التصريف موجود في المرفقات وهو يعتمد كما هو واضح على نافذة الدوس :)

Answer.rar

1
#18

السلام عليكم

لو سمحتم أشرح فكرتي في الحل - البرنامج مكتوب بالدلفي

أولا لدينا الأرقام من 1 .. 9 نبحث عن كل الثلاثيات الممكنة ونضعها في المصفوفة Couples عددها 504

   
Procedure CalculCouples ;
var
  i,j,k,n : Integer;
  V : string;
begin
  K := 1;
  V:= '000';
  for I := 1 to 9 do
    begin
      V[1] := IntToStr(i)[1];
      for j := 1 to 9 do
        begin
          if i = j then Continue;
          V[2] := IntToStr(J)[1];
          for n := 1 to 9 do
            begin
              if (i = n) or (n = j) then Continue;
              V[3] := IntToStr(n)[1];
              Couples[k] := V;
              K:=K+1;
            end;
        end;

    end;
end;

كل ثلاثية تمثل كسر: الرقم الأول = البسط والرقمين الأخيرين = المقام

نقوم بالبحث عن كل ثلاث ثلاتيات تحقق الشروط - عدم تكرار الأرقام- وفي كل مرة نحسب المعادلة لنرى هل تساوي 1

Procedure FindSoultion;
var
 i,j,n,a,b,c,d,e,f : Integer;
 V1,V2,V3 : string;
 X : Real;
begin
 for I := 1 to 504 do
   begin
     V1 := Couples;
     for J := 1 to 504 do
       begin
         V2 := Couples[j];
         if ((j=i) or (Pos(V1[1],V2)>0)or (Pos(V1[2],V2)>0)or (Pos(V1[3],V2)>0)) then
           begin
             V2 := '';
             Continue;
           end;
         for n := 1 to 504 do
           begin
             V3 := Couples[n];
             if ((n=j) or (n= i) or (Pos(V1[1],V3)>0)or (Pos(V1[2],V3)>0)or (Pos(V1[3],V3)>0)or (Pos(V2[1],V3)>0)or (Pos(V2[2],V3)>0)or (Pos(V2[3],V3)>0)) then
               begin
                 V3 := '';
                 Continue;
               end;
             if (V1 = '') or (V2 = '') or (V3 = '') then Continue;
             a := StrToInt(V1[1]);
             b := StrToInt(V1[2]+V1[3]);
             c := StrToInt(V2[1]);
             d := StrToInt(V2[2]+V2[3]);
             e := StrToInt(V3[1]);
             f := StrToInt(V3[2]+V3[3]);
             X := (a/b)+ (c/d) + (e/f);
             if (X >= 1) and (X <= 1.000001) then
               begin
                 ShowMessage(V1 + V2 + V3 + ',' + FloatToStr(X));
                 Exit;
               end;
           end;


       end;
   end;

توصلت لنفس الحل المدكور سابقا

أرجو أن ينال إعجابكم

بالتوفيق

تم تعديل هذه المشاركة بواسطة bahmani في 1 يوليو 2010 في 17:08

2
#19

السلام عليكم ...

لقد اعتقدت أنه موضوع جديد لهدا لم اقرأ الرسائل أخرى لكي لا أفسد على نفسي متعة التحدي

ولكن كان ممتعا

فكرتي الأساسية وهي :

إستعمال أكبر رقم ممكن مع أصغر زوج أرقامٍ ممكن لأقترب من قيمة "1" ومنه 9/12 هو الأنسب

والبحت عن عددين جمعهما يساوي 0.25 ، لقد ارتكبت خطأ ، أردت في بادئ الأمر أن أجمع فقط الأرقام القابلة للقسمة على 5 متل 0.125 لا كني لم احصل على أي حل فقمت بحدفها ليجاد جميع الحلول :

فلم أجد إلا واحدا

#!/usr/bin/perl -w
use strict;

sub ln
{
    print @_,"\n";
}

ln "example : 5/34 + 7/68 + 9/12 = " . (5/34 + 7/68 + 9/12) ;

my %data = ();
for( 1..9 )
{
    for my $x10 ( 1..9 )
    {
        next if $_ == $x10;

        for my $x1( 1..9 )
        {
            next if $_ == $x1 || $x10 == $x1;

            my $tmp = $_ / ($x10 * 10 + $x1 );
            #if( $tmp=~/(5|0)$/ )
            {
                $data{"$_/$x10$x1"} = $tmp ;
            }

        }
    }
}

foreach my $ky ( sort keys %data )
{
    ln "$ky : $data{$ky}"
}

my %results = ();
foreach my $ky1 (sort keys %data )  
{
    foreach my $ky2 ( sort keys %data )
    {
        next if $ky1 eq $ky2;
        my @tmpky1 = split //, $ky1;
        next if $ky2 =~ /($tmpky1[0]|$tmpky1[2]|$tmpky1[3])/;

        foreach my $ky3 ( sort keys %data )
        {
            next if $ky1 eq $ky3 || $ky2 eq $ky3;

            my @tmpky2 = split //, $ky2;
            next if $ky3 =~ /($tmpky1[0]|$tmpky1[2]|$tmpky1[3])/ || $ky3 =~ /($tmpky2[0]|$tmpky2[2]|$tmpky2[3])/;

            my $tmp = $data{$ky1} + $data{$ky2} + $data{$ky3};
            do{ $results{"$ky1 + $ky2 + $ky3"} = $tmp ;
                ln "$ky1 + $ky2 + $ky3 = $tmp";} if $tmp == 1 ;
        }
    }
    ln "$ky1 ..."
}

while (my ($ky,$vl) = each(%results))
{
    ln "$ky : $vl"
}

__END__

5/34 + 9/12 + 7/68 : 1
5/34 + 7/68 + 9/12 : 1
7/68 + 9/12 + 5/34 : 1
9/12 + 7/68 + 5/34 : 1
7/68 + 5/34 + 9/12 : 1
9/12 + 5/34 + 7/68 : 1

سلام

تم تعديل هذه المشاركة بواسطة Z3vil في 2 يوليو 2010 في 02:45

#20

اعتقد ان هناك حل اسرع وابسط

حيث سنصل فى البداية لمعرفة 4 ارقام ثم بعد خطوة اخرى سنعرف رقمين وبعد خطوة اخيرة سنعرف الثلاث الارقام الباقية بدون اى مشقة ويمكن حسابها رياضيا بدون اى برامج ولكنى ارفقت البرنامج لحساب احتمالات الحل والصورة للتوضيح

اولا

لابد ان يكون هناك عامل مشترك اصغر بين المقامات الثلاث للحصول على ناتج بعدد صحيح (1 ) وحيث انها 9 ارقام فقط ولا يجوز تجاوزها فلا يمكن اختيار عامل مشترك اصغر غير العدد 2 لمنع اى تجاوز

وبالتالى سوف نقوم بعمل تباديل للارقام من 4 إلى 1 بدون تكرار وبذلك سوف تحصل على 12 تبديلة وتلك التبديلات هى قيم المقام الاول اما قيم المقام الثانى فهى تساوى قيم المقام الاول بعد ضربها فى 2 حيث كما قلنا يجب ان يكون هناك عامل مشترك اصغر بين المقامات .

ثانيا

سوف يتم إلغاء الحلول المقترحة حيث ان اى تكرار بين المقام الاول والمقام الثانى يلغى الحل المقترح وكذلك عدم وجود شرط الزوجية بين المقام الاول والمقام الثانى حيث وجود فردية احدهما دون الاخر يلغى شرط وجود عامل مشترك اصغر والذى تم استنتاجه بأنه لابد ان يكون 2 بين الحلول المقترحة حتى لا تتجاوز الارقام فى المقامات الـ 9 أرقام

ثالثا

يتم فحص الحلول وايجاد قيم البسط لكل حل مقترح تم التأكد من خلوه من الالغاء ( وذلك من ثانيا ) وذلك بان يكون

4 * البسط ذو المقام الاقل + 2 * البسط ذو المقام الاكبر = القاسم المشترك الاكبر للعددين

وذلك مع عدم التكرار

وقد جاءت تلك المعادلة حيث ان قيمة المقام الاول قيمة زوجية ولتكن 2Q وذلك وفقا للشرط ان يكون هناك عامل مشترك اصغر

وبالتالى قيمة المقام الثانى ستكون زوجية ايضا وستكون القيمة هى 4Q

وعلى ذلك يمكن تمثيل هذين الكسرين كالاتى

ِِA/2Q + B /4Q

ومنها 2A + B) / 4Q)

ومنها يجب ان يكون 2A + B = Q حتى يكون الناتج منهما هو 1/4 (ويكون اقل من الطرف الاخر للمعادلة وهو 1)

اى بالشكل التالى 4A + 2B = 2Q

وبالتالى سوف تجد ان يوجد حل وحيد وهو ان يكون البسط 5 للمقام الاقل 34 وكذلك 7 للمقام الاكبر 68 وذلك ليتساوى مجموع ضعف البسط ذو المقام الاقل 4 *5 و بسط المقام الاكبر 2*7 مع القاسم المشترك الاكبر للعددين 34 و 68 وهو 34 وبالتالى اصبح من السهل وجود الثلاثة ارقام الاخيرة والتى يجب ان تساوى 3/4 وذلك من الاعداد الغير مكررة (1 و 2 و 9)

وبالتالى سوف تجد انه 9/12

9digit.rar

post-108462-071283100 1278170755_thumb.j

المرفقات
9digit.jpeg

تم تعديل هذه المشاركة بواسطة fmgret12 في 3 يوليو 2010 في 18:53

#21

اللغز يمثل معادلة واحدة في تسعة متغيرات كالآتي

p><p>

لذا أعتقد أنه من المستحيل حل اللغز بالإستنتاج الرياضي فقط و بدون تجربة الأرقام .. فهل إعتقادي صحيح ؟

أسألكم الدعاء لأبي و أمي

#22
بن حسن كتب:

لذا أعتقد أنه من المستحيل حل اللغز بالإستنتاج الرياضي فقط و بدون تجربة الأرقام .. فهل إعتقادي صحيح ؟

نعم أخى الفاضل استنتاجك صحيح ، ولذلك ان قلت سابقا هذا الكلام

عماد حمدي احمد كتب:

نعم حل المسألة يتم بتجريب الأعداد (باستخدام برنامج مثلا) ولكن يمكن استخدام الرياضيات لتقليل عدد التجريبات :)

بارك الله فيك وبارك لك ،،،

1

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

مواضيع مشابهة