• 0
khatibe_30

لغز برمجي, التحدي مفتوح بأي لغة برمجة

سؤال

السلام عليكم أعزائي, مرحبا بكم

أقدم لكم مسألة حسابية (مشكلة) و المطلوب إيجاد الحل البرمجي لها.

المعطيات:

نفترض أنه لدينا 3 أنابيب بسعة متساوية, سعة كل أنبوب 6 لتر, و وعاءين (2 وعاء) نستخدمهما لنملأ الأنابيب بالماء, في كل مرة نسكب الماء في أنبوب ما من الأنابيب (الترتيب غير مهم) باستخدام أحد الأوعية إلى أن نملأ كل الأنابيب.

الوعاء الأول سعته 3 لترات, و الوعاء الثاني سعته 2 لترات.

الشرط الوحيد الذي يجب أن نتقيد به هو أن لا نجد مستوى الماء متساوي في أنبوبين متجاورين أثناء أي مرحلة من العملية, مثلا أنظر إلى الصورة:

719119421.png

العملية على اليسار صحيحة, لأنه لا يوجد أنبوبين متجاورين لهما نفس المستوى من الماء

العملية على اليمين, غير مسموح القيام بها, الأنبوب الثاني و الثالث لهما نفس المستوى, لذلك يجب أن نتوقف.

إذن, يجب أن نملأ الأنابيب, نسكب كمية من الماء باستعمال أحد الأوعية في كل أنبوب إلى أن نملأه باستخدام مجموعة من الأوعية, على شرط عدم وصول الماء لنفس المستوى في أنبوبين متجاورين, في المثال السابق, من أجل 3 أنابيب, سعة كل أنبوب 6 لترات, يوجد طريقتين لملأ الأنابيب كما في الصورة:

683632173.png

الطريقة الأولى, على اليسار: الأنبوب الأول 3-3, الأنبوب الثاني 2-2-2, الأنبوب الثالث 3-3

الطريقة الثانية, على اليمين: الأنبوب الأول 2-2-2, الأنبوب الثاني 3-3, الأنبوب الثالث 2-2-2

و من أجل 3 أنابيب, سعة كل أنبوب 8 لترات, يوجد 4 طرق, و هذه إحدى الطرق في الصورة:

2-3-3, 3-3-2, 2-3-3

473251544.png

في حين أن العملية التالية خاطئة:

3-3-2, 2-2-2-2, 3-2-3

776692695.png

خلال العملية, نلاحظ أن الأنبوب الثاني و الثالث يمكن أن يكون الماء فيهما في نفس المستوى باستعمال سلسلة الأوعية المعطاة لكل أنبوب.

المطلوب:

أوجد عدد الطرق التي يمكن أن نملأ بها 10 أنابيب, سعة كل أنبوب 32 لتر, يمكنك أن تستعمل أي لغة برمجة تريد في كتابة الكود الذي سيقوم بالحساب.

أي, من أجل N = 10 و L = 32 كم يوجد من عدد الطرق ملأ الأنابيب؟

الأفضل أن تكتب الكود الذي سيعمل في الحالة العامة, من أجل عدد أنابيب N, كل أنبوب بسعة L لترات, أوجد عدد الطرق التي يمكن أن نملأ بها الأنابيب.

معطيات مساعدة:

إليك هذه النتائج المحسوبة مسبقا:

من أجل N = 3 و L = 8 هناك 4 طرق

من أجل N = 3 و L = 9 هناك 8 طرق

من أجل N = 5 و L = 10 هناك 28 طريقة

من أجل N = 6 و L = 13 هناك 452 طريقة

من أجل N = 5 و L = 16 هناك 1796 طريقة

ملاحظة: قبل أن أكتب الموضوع أجريت بحثا في المنتدى حتى أتجنب التكرارا و لم أجد موضوعا مشابه, لذلك, إذا كان الموضوع مكررا فأرجو حذفه و إبلاغي.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

41 إجابة على هذا السؤال .

  • 0

لغز جميل رائع سأحاول حله إن شاء الله بلغة الأوبجكت باسكال

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سؤال:

بآخر مثال ذكرت :

في حين أن العملية التالية خاطئة:

3-3-2, 2-2-2-2, 3-2-3

طيب ألا يمكن أن نقوم بعملية ملء كل أنبوب لوحده .... وبذلك لن تكون الأنابيب بنفس المستوى أبداً ....ولكن بنفس الترتيب ... الذي ذكرته ..

أعني أنه لا يكفي أن نكتب ترتيب ملء كل أنبوب .. بل يجب أن نذكر متى قمنا بكل عملية ملء ...

________________________________________

وسؤال تاني : كم تدفع لمن يحله laugh.giflaugh.giflaugh.giflaugh.gif

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سؤال:

بآخر مثال ذكرت :

3-3-2, 2-2-2-2, 3-2-3

طيب ألا يمكن أن نقوم بعملية ملء كل أنبوب لوحده .... وبذلك لن تكون الأنابيب بنفس المستوى أبداً ....ولكن بنفس الترتيب ... الذي ذكرته ..

أعني أنه لا يكفي أن نكتب ترتيب ملء كل أنبوب .. بل يجب أن نذكر متى قمنا بكل عملية ملء ...

________________________________________

وسؤال تاني : كم تدفع لمن يحله laugh.giflaugh.giflaugh.giflaugh.gif

لا طبعا, إذا كنت ستملأ كل أنبوب لوحده, فالانابيب لن تكون في مستوى متساوي ابدا حتى لو استخدمت 2-2-2-2, 2-2-2-2, 2-2-2-2 و لا فائدة من المسألة كلها

يعني انت لما تعطيني هالسلسلة لملأ 3 أنابيب:

3-3-2, 2-2-2-2, 3-2-3

فالمطلوب انه مهما كان الترتيب الذي أنفذ به السلسلة فلا يجب أن أصل لمستوى متساوي من الماء في الانابيب

و أنا لما أسكب في الأنبوب الأول 3-3, و في الأنبوب الثاني 2-2-2 (البداية من اليسار إلى اليمين) فراح أوصل لمستوى 6 في الأنبوبيبن 1 و 2 و هذا ممنوع

+

سأدفع للفائز 20 نقطة من رصيدي يحولها له المشرف :happy:

تم تعديل بواسطه khatibe_30
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سأدفع للفائز

لا أمزح معك بجد ... لا يوجد تحويل رصيد laugh.giflaugh.gif

بالنسبة للمسألة إذا يمكن ان يكون الشرح :

كلما نسكب الماء نضع خط على الأنبوب حيث وصل الماء ..

والمطلوب ألا يكون أي خطين على استقامة واحدة ... ما رأيك wink.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا أمزح معك بجد ... لا يوجد تحويل رصيد laugh.giflaugh.gif

بالنسبة للمسألة إذا يمكن ان يكون الشرح :

كلما نسكب الماء نضع خط على الأنبوب حيث وصل الماء ..

والمطلوب ألا يكون أي خطين على استقامة واحدة ... ما رأيك wink.gif

أجل

كل ما نسكب الماء نضع خط على الأنبوب و يجب أن لا نجد أن هناك خطين متجاورين على نفس المستوى

هذه طريقة أسهل للفهم :wink:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

و من أجل 3 أنابيب, سعة كل أنبوب 8 لترات, يوجد 4 طرق, و هذه إحدى الطرق في الصورة:

2-3-3, 3-3-2, 2-3-3

473251544.png

في حين أن العملية التالية خاطئة:

3-3-2, 2-2-2-2, 3-2-3

776692695.png

خلال العملية, نلاحظ أن الأنبوب الثاني و الثالث يمكن أن يكون الماء فيهما في نفس المستوى باستعمال سلسلة الأوعية المعطاة لكل أنبوب.

المطلوب:

أوجد عدد الطرق التي يمكن أن نملأ بها 10 أنابيب, سعة كل أنبوب 32 لتر, يمكنك أن تستعمل أي لغة برمجة تريد في كتابة الكود الذي سيقوم بالحساب.

أي, من أجل N = 10 و L = 32 كم يوجد من عدد الطرق ملأ الأنابيب؟

الأفضل أن تكتب الكود الذي سيعمل في الحالة العامة, من أجل عدد أنابيب N, كل أنبوب بسعة L لترات, أوجد عدد الطرق التي يمكن أن نملأ بها الأنابيب.

معطيات مساعدة:

إليك هذه النتائج المحسوبة مسبقا:

من أجل N = 3 و L = 8 هناك 4 طرق

من أجل N = 3 و L = 9 هناك 8 طرق

من أجل N = 5 و L = 10 هناك 28 طريقة

من أجل N = 6 و L = 13 هناك 452 طريقة

من أجل N = 5 و L = 16 هناك 1796 طريقة

ملاحظة: قبل أن أكتب الموضوع أجريت بحثا في المنتدى حتى أتجنب التكرارا و لم أجد موضوعا مشابه, لذلك, إذا كان الموضوع مكررا فأرجو حذفه و إبلاغي.

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

هل يمكنك سرد الاربع حلول التى تم ذكرها حيث اننى لم اتمكن من الحصول إلا على اثنين فقط ؟؟؟؟؟؟؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

هل يمكنك سرد الاربع حلول التى تم ذكرها حيث اننى لم اتمكن من الحصول إلا على اثنين فقط ؟؟؟؟؟؟؟؟؟؟

هكذا, :

2-3-3, 3-3-2, 2-3-3

أو

3-3-2, 2-3-3, 3-3-2

أو

3-2-3,2-2-2-2,3-2-3

أو

2-2-2-2, 3-2-3, 2-2-2-2

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هكذا, :

2-3-3, 3-3-2, 2-3-3

أو

3-3-2, 2-3-3, 3-3-2

أو

3-2-3,2-2-2-2,3-2-3

أو

2-2-2-2, 3-2-3, 2-2-2-2

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

اعتقدت ان عدد مرات سكب الماء فى كل الانابيب واحد ولذلك اعتقدت ان الحلين الاخيرين لا يحققان الشروط

اما اذا كانت الشروط كذلك اعتقد من الممكن حلها باسلوب بسيط وساحاول حلها ان شاء الله بمجرد عدم انشغالى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اعتقدت ان عدد مرات سكب الماء فى كل الانابيب واحد ولذلك اعتقدت ان الحلين الاخيرين لا يحققان الشروط

اما اذا كانت الشروط كذلك اعتقد من الممكن حلها باسلوب بسيط وساحاول حلها ان شاء الله بمجرد عدم انشغالى

عدد مرات سكب الماء لا يهم, المهم ان تتوقف عند امتلاء الاناء, بعبارة اخرى ان يكون مجموع سعة الاواني المستعملة لسكب الاناء مساوي لسعة الاناء

بالتوفيق,,في انتظار الحل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

لغز برمجى رائع

حاولت وضع قانون رياضى لتسهيل حل هذا برمجياً ولكن لم أتحصل عليه , وأيضاً حاولت وضع كود برمجى يتبع إسلوب الإنسان فى عملية وضع جميع الحلول لملئ الأنابيب ثم إختيار الأنسب وفق الشروط ولكن لم أوفق فى هذا أيضاً smile.gif , فى إنتظار الحل ...

دمت بخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليك

بعد غياب بسبب مشاغلي أظن أني قد حللت اللغز فهذا هو وسأطرح الشرح فيما بعد إن شاء الله لأني مستعجل

procedure TForm1.Button1Click(Sender: TObject);
var i,j,h,f,x:integer;
a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16:byte;
table,addTable:array[1 .. 26215,1 .. 16] of byte;
test:Boolean=false;
count:real=0;
begin
i:=1; x:=0;
for a1:=2 to 3 do
for a2:=2 to 3 do
for a3:=2 to 3 do
for a4:=2 to 3 do
for a5:=2 to 3 do
for a6:=2 to 3 do
for a7:=2 to 3 do
for a8:=2 to 3 do
for a9:=2 to 3 do
for a10:=2 to 3 do
for a11:=2 to 3 do
for a12:=2 to 3 do
for a13:=2 to 3 do
for a14:=2 to 3 do
for a15:=2 to 3 do
for a16:=2 to 3 do
begin
if a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16=32 then
begin
table[i,1]:=a1;table[i,2]:=a2;table[i,3]:=a3;
table[i,4]:=a4;table[i,5]:=a5;table[i,6]:=a6;table[i,7]:=a7;
table[i,8]:=a8;table[i,9]:=a9;table[i,10]:=a10;table[i,11]:=a11;
table[i,12]:=a12;table[i,13]:=a13;table[i,14]:=a14;table[i,15]:=a15;table[i,16]:=a16;
i:=i+1; h:=16; test:=true;
end
else
if a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15=32 then
begin
table[i,1]:=a1;table[i,2]:=a2;table[i,3]:=a3;
table[i,4]:=a4;table[i,5]:=a5;table[i,6]:=a6;table[i,7]:=a7;
table[i,8]:=a8;table[i,9]:=a9;table[i,10]:=a10;table[i,11]:=a11;
table[i,12]:=a12;table[i,13]:=a13;table[i,14]:=a14;table[i,15]:=a15;
i:=i+1; h:=15; test:=true;
end
else
if a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14=32 then
begin
table[i,1]:=a1;table[i,2]:=a2;table[i,3]:=a3;
table[i,4]:=a4;table[i,5]:=a5;table[i,6]:=a6;table[i,7]:=a7;
table[i,8]:=a8;table[i,9]:=a9;table[i,10]:=a10;table[i,11]:=a11;
table[i,12]:=a12;table[i,13]:=a13;table[i,14]:=a14;
i:=i+1; h:=14; test:=true;
end
else
if a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13=32 then
begin
table[i,1]:=a1;table[i,2]:=a2;table[i,3]:=a3;
table[i,4]:=a4;table[i,5]:=a5;table[i,6]:=a6;table[i,7]:=a7;
table[i,8]:=a8;table[i,9]:=a9;table[i,10]:=a10;table[i,11]:=a11;
table[i,12]:=a12;table[i,13]:=a13;
i:=i+1; h:=13; test:=true;
end
else
if a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12=32 then
begin
table[i,1]:=a1;table[i,2]:=a2;table[i,3]:=a3;
table[i,4]:=a4;table[i,5]:=a5;table[i,6]:=a6;table[i,7]:=a7;
table[i,8]:=a8;table[i,9]:=a9;table[i,10]:=a10;table[i,11]:=a11;
table[i,12]:=a12;
i:=i+1; h:=12; test:=true;
end
else
if a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11=32 then
begin
table[i,1]:=a1;table[i,2]:=a2;table[i,3]:=a3;
table[i,4]:=a4;table[i,5]:=a5;table[i,6]:=a6;table[i,7]:=a7;
table[i,8]:=a8;table[i,9]:=a9;table[i,10]:=a10;table[i,11]:=a11;
i:=i+1; h:=11; test:=true;
end ;
if test then
for j:=1 to h do
begin
x:=x+table[i-1,j];
addTable[i-1,j]:=x;
end;
x:=0;
test:=false;

end;
for i:=1 to 26215 do
for f:=i+1 to 26215 do
begin
test:=false;
for j:=1 to 15 do
for h:=1 to 15 do
if (addtable[f,h] <> 0) and (addtable[f,h] <> 32) then
if addtable[f,h]= addtable[i,j] then test:=true;
if test=false then begin count:=count+1 ; end;
end;
//count := 1708910
count:=power(count,5);
Label1.Caption:=floattostr(count);

end;

الناتج هو


1,45745768883e+31

تم تعديل بواسطه linuxman
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الناتج هو


2.9149153776673 E31

وعليكم السلام

لا, النتيجة فيها 15 رقم فقط

هل جربت الكود على القيم المعطاة؟:

من أجل N = 3 و L = 8 هناك 4 طرق

من أجل N = 3 و L = 9 هناك 8 طرق

من أجل N = 5 و L = 10 هناك 28 طريقة

من أجل N = 6 و L = 13 هناك 452 طريقة

من أجل N = 5 و L = 16 هناك 1796 طريقة

+

جديد:

تم اضافة صفحة للتحقق من نتائجكم فورا

http://ikamira.99k.org/at_puzzel.php

تم تعديل بواسطه khatibe_30
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أظن أني اخطات في الكود ولكن مع ذلك لست مقتنعا بأن عدد الاحتمالات هو 15 وسأعود إن شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
لست مقتنعا بأن عدد الاحتمالات هو 15

قال ياسين أن عدد الحتمالات هو 15 رقم .. يعني 15digits ... من 15 منزلة ...

بالتوفيق أخي linuxman .. أنت الوحيد المتحمس لحل المسألة ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قال ياسين أن عدد الحتمالات هو 15 رقم .. يعني 15digits ... من 15 منزلة ...

بالتوفيق أخي linuxman .. أنت الوحيد المتحمس لحل المسألة ..

أجل أجل كما قال الحاج مصطفى, 15 digits, مثلا 454123685214651

أين المحاولة أيها الحاج؟!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
أين المحاولة أيها الحاج؟!

laugh.gif

كرمى لعيونك ..سأحل اللغز اليوم .. وأرسل الحل مساءً أو غداً صباحاً ...

الآن بدأ التحدي بالنسبة لي ..wink.gifwink.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت بإعادة النظر وأرى أن الكود الذي كتبته صحيح مع تعديل طفيف قمت به وقد تغيرت النتيجة كما ترون ولكن بقي العدد من 32 درجة

بيان للكود :

حتى الرقم المتحصل عليه

count := 1708910

كانت هذه احتمالات أنبوبين من العشرة وهي منطقية جدا وذلك لأني قمت باستقصاء الاحتمالات من التشكيلة 2و 3 بحيث يكون المجموع 32 بالحلقات المتداخلة وكان عدد الاحتمالات 26215

ثم قمت بجمع كل الحدود حدا حدا وكلما جمعت خزنت النتيجة في المصفوفة ثنائية الأبعاد

ثم احتمال التقاء كل تشكيلة مع الأخرى حتى مع نفسها هو ضرب 26215*26215 الناتج سيكون كبيرا وهو 687226225 ولكن مع الفلترة كان الحاصل هو 1708910 احتمالا

الآن كل أنبوبين يتكرران خمس مرات بكل احتمالاتهما إذا الاحتمالات في عشر أنابيب هي 1708910 قوة 5 الناتج هو

1,45745768883e+31

والله أعلم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت بإعادة النظر وأرى أن الكود الذي كتبته صحيح مع تعديل طفيف قمت به وقد تغيرت النتيجة كما ترون ولكن بقي العدد من 32 درجة

بيان للكود :

حتى الرقم المتحصل عليه

count := 1708910

كانت هذه احتمالات أنبوبين من العشرة وهي منطقية جدا وذلك لأني قمت باستقصاء الاحتمالات من التشكيلة 2و 3 بحيث يكون المجموع 32 بالحلقات المتداخلة وكان عدد الاحتمالات 26215

ثم قمت بجمع كل الحدود حدا حدا وكلما جمعت خزنت النتيجة في المصفوفة ثنائية الأبعاد

ثم احتمال التقاء كل تشكيلة مع الأخرى حتى مع نفسها هو ضرب 26215*26215 الناتج سيكون كبيرا وهو 687226225 ولكن مع الفلترة كان الحاصل هو 1708910 احتمالا

الآن كل أنبوبين يتكرران خمس مرات بكل احتمالاتهما إذا الاحتمالات في عشر أنابيب هي 1708910 قوة 5 الناتج هو

1,45745768883e+31

والله أعلم

في حالة أنبوب واحد بـ 32 لتر, هناك 3329 طريقة

في حالة أنبوبين ب 32 لتر, هناك 37120 طريقة

لكن لا يمكن اجراء العملية n قوة m لأن هناك شرط يقيد الطرق التي يمكن استعمالها في ملء أنبوبين متجاورين

و الا كان ليكون عد الطرق في أنبوبين هو 33292 = 11082241 و هذا خطأ, هناك استثنائات كثيرة يتم التخلص منها

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

laugh.gif

كرمى لعيونك ..سأحل اللغز اليوم .. وأرسل الحل مساءً أو غداً صباحاً ...

الآن بدأ التحدي بالنسبة لي ..wink.gifwink.gif

ههههههههههه

يا معلم مش كنت تقول من زمان انك مستني التحدي, طيب في انتظار الحل و اكيد راح تشتغل بالسي ++ :happy:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
في حالة أنبوب واحد بـ 32 لتر, هناك 3329 طريقة

هذا بداية الخلاف بيني وبينك وأنا اثبت لك أن أنبوبا واحدا يحتمل أكثر مما ذكرت وهو العدد الذي ذكرته وهو 26215

والدليل في المرفقات

text.txt

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عزيزي linuxman الخطأ الجوهري يكمن في خوارزميتك...

فهي تدرس الاحتمالات جميعاً ... وبالتالي عندما تعمل عدة حلقات for متداخلة في مسألة كهذه فأول خطأ سترتكبه سيكون تكرار نفس الاحتمال عدة مرات ...

صحيح ان هذا سيكون صحيحاً "احتمالياً "..ولكنه سيكون خاطئا بالنسبة لمعطيات المسألة ...

لاحظ ضمن الملف المرفق أن نفس الاحتمال يتكرر عدة مرات والصحيح أنه يكون مرة واحدة فقط ...

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

__________________________

لاحظ آخر 34 سطر في المرفق ... وال34 سطر الذي قبلها ... كلها نفس الاحتمال مكرر عشرات المرات ... وهنا يكمن خطؤك ...

أرجو لك التوفيق...

بالنسبة للحل أخي ياسين ..فقد درست المسألة .. ووضعت الخوارزمية بالخطوط العريضة حالياً ... وسأرسل الحل لك على الخاص ...

حتى لا أحرق السؤال ... (نفسي أشوف المشرف الأخ محمد ابراهيم وهو يحلها )laugh.giflaugh.gif

أتوقع حسب دراستي الحالية (هناك 3 خطوات للوصول للجواب الأولي تتعلق بسعة الانبوب والأخيرة تتعلق بعدد الأنابيب والثانية وسيطة ) ربما يستغرق كتابة الخوارزمية معي 3-4 ساعات ,...

وكتابة الكود بعد الخوارزمية قد يستغرق ساعتين أو ثلاث .. إن شاء الله تعالى ...

يعني تقريباً أحتاج إلى يوم الغد كاملاً حتى أنهي الحل ... ثم أرسله لك بإذن الله تعالى ...

انتظر رسالتي غدا (في مثل هذا الوقت +ساعتين )

بارك الله فيك ..مسألة جميلة جداً ...وأظن أن قلة الإقبال عليها تعني أنها ممتازة وتحتاج إلى تفرغ لمن يريد حلها ...

نلتقي ان شاء الله ...

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا بداية الخلاف بيني وبينك وأنا اثبت لك أن أنبوبا واحدا يحتمل أكثر مما ذكرت وهو العدد الذي ذكرته وهو 26215

والدليل في المرفقات

يمكنك أن تتأكد أن هناك 3329 طريقة في حالة أنبوب واحد بـ 32 لتر عن طريق تطبيق هذه الخوارزمية:

integer ways(integer n)
begin
if n = 0
return 1
end if

if n < 0
return 0
end if

return ways(n-2) + ways(n-3)
end

//use
print(ways(32)); //result = 3329

البداية من 32, في كل مرة ننقص 2 أو 3, دالة تراجعية واضحة أظن

__________________________

لاحظ آخر 34 سطر في المرفق ... وال34 سطر الذي قبلها ... كلها نفس الاحتمال مكرر عشرات المرات ... وهنا يكمن خطؤك ...

أرجو لك التوفيق...

بالنسبة للحل أخي ياسين ..فقد درست المسألة .. ووضعت الخوارزمية بالخطوط العريضة حالياً ... وسأرسل الحل لك على الخاص ...

حتى لا أحرق السؤال ... (نفسي أشوف المشرف الأخ محمد ابراهيم وهو يحلها )laugh.giflaugh.gif

أتوقع حسب دراستي الحالية (هناك 3 خطوات للوصول للجواب الأولي تتعلق بسعة الانبوب والأخيرة تتعلق بعدد الأنابيب والثانية وسيطة ) ربما يستغرق كتابة الخوارزمية معي 3-4 ساعات ,...

وكتابة الكود بعد الخوارزمية قد يستغرق ساعتين أو ثلاث .. إن شاء الله تعالى ...

يعني تقريباً أحتاج إلى يوم الغد كاملاً حتى أنهي الحل ... ثم أرسله لك بإذن الله تعالى ...

انتظر رسالتي غدا (في مثل هذا الوقت +ساعتين )

بارك الله فيك ..مسألة جميلة جداً ...وأظن أن قلة الإقبال عليها تعني أنها ممتازة وتحتاج إلى تفرغ لمن يريد حلها ...

نلتقي ان شاء الله ...

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

طيب لما تحلها و تجرب نتيجتك على صفحة التحقق من النتائج و تلاقيها صحيحة :cool: ضع الحل و الكود هنا

يعني لو كل واحد يقول ما اكتب الحل عشان ما تتحرق المسألة, المسألة ما راح تنحل

يلا عاوزين نجيب لغز جديدة, المرة الجاية أي حد منكم يجيب لغز برمجي لأني أريد احاول ما ابقى اتفرج :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عرفت الآن مكمن الخطأ في الخوارزمية وهو الذي أدى إلى التكرار وهو الذي جعل عدد الاحتمالات كبيرة جدا

جزاك الله خيرا يا مصطفى لم أنتبه لذلك بسبب تسرعي وعجلتي

وقد اصلحت الخطأ

تم تعديل بواسطه linuxman
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فهمت المسألة تماماً ...

ويمكنني حلها يدويا الآن ...(طبعا للحالات الصغيرة)

مثلاً من أجل L 5,6,7 هناك حلان فقط من أجل أي عدد للأنابيب N

المسألة تعتمد على تحليل العدد إلى مجموع مكون من 2 و 3 فقط دون تكرار ...

وخطوات الحل : تحليل العدد إلى مجموع --> إيجاد سلسلة أرقام تتزايد بمقادر 2 أو 3 في كل مرة تبدأ بالصفر وتنتهي بL --> سينتج لنا عدد من السلاسل هو عدد الحلول لأنبوب واحد ...

مثال على السلسلة:

0 --> 2 --> 5 -->7 السلسلة الأولى

0-->3-->5-->7 السلسلة الثانية

0-->2 --> 4-->7 السلسلة الثالثة

والآن نقارن كل سلسلة مع السلاسل الباقية كما يلي :

باستثناء أول وآخر قيمة 0وL إذا تشابهت أي قيمتان من أي سلستين ..فهذا يعني أنه لا يمكننا وضعهما قرب بعضهما ...

مثلاً لا يمكن وضع السلسلة الأولى مع أي من السلسلتين الثانية والثالثة لأنها تشابههما ب5 و 2

والمقابل فالسلاسل التي لا تحوي حدودا متماثلة يمكن وضعها معاً أينما كان .. فالسلسلة الثانية والثالثة ..يمكن أن نضعهما قرب بعضهما ..

والآن نبدأ بعد الحتمالات فلو بدأنا من السلسلة 2 يجب أن نضع 3 بعدها ثم 2 ثم3 لإلى آخر عدد الأنابيب

ثم نبدأ من سلسلة أخرى 3 ,نضع بعدها 2 ثم 3 وهكذا ...

لا يمكن البدء بالسلسلة الأولى لأنه لا يوجد لها سلسلة مغايرة لجميع القيم ...

فيكون عدد الاحتمالات لN=7 هو 2 فقط ...

سأحتاج يوماً إضافيا لكتابة الكود ,,, laugh.giflaugh.giflaugh.gif

بالتوفيق للجميع

والسلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .