• 0
هاني الأتاسي

سلسلة - شغل مخك (12)

سؤال

لدينا مربع يحتوي على 9 أرقام على حسب الترتيب التالي :



1 2 3

4 5 6

7 8 9

ماهو الكود اللازم الذي يوجد الأرقام التسع السابقة بحيث يكون مجموع الأرقام في الخطوط المستقيمة 17 وبالتحديد مجموع المواقع التالية :

1 + 2 + 3 = 17

1 + 4 + 7 = 17

3 + 6 + 9 = 17

3 + 5 + 7 = 17

7 + 8 + 9 = 17

:)

0

شارك هذا الرد


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

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

  • 0

مساعدة : هذا السؤال ممكن حله عن طريق موضوع قديم في هذا القسم من المنتدى ... ;)

0

شارك هذا الرد


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

وماذا شأن الخطوط

2+5+8

4+5+6

1+5+9

3+5+7

انا لدى حل هذه المسئله ولكن بحيث يكون المجموع 15

0

شارك هذا الرد


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

لا 17!!! الخطوط البقية أنا مابدي اياهن .. :) وأيضا أريد الحل مع الطريقة

0

شارك هذا الرد


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

أنا عندي حل هذه المسألة :P من أجل أي مربع n×n

بس n عدد فردي

من أجل كل الخطوط :(

0

شارك هذا الرد


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

نعم ممكن تتكرر الأرقام .. وأنا بدي طريقة برمجية مو رياضية ..

0

شارك هذا الرد


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

ياشباب --- مساعدة :::

ليش ماتقومو بتجريب كل الحالات الممكنة وتقومو بكتابة كود من أجل ذلك ..؟؟؟

0

شارك هذا الرد


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

أخى هانى الأتاسى..

أولاً أحب أن أحييك على فكرة السلسلة المدهشة.. :)

وهى فعلاً تشغل المخ وبشدة..

فى هذه المسألة غسلت رأسى 3 مرات بماء بارد حتى أطفئ لهيب مخى الى قارب أنه يشيط :D:D

ذلك لأنى أستخدمت فى الحل 11 حلقة For .ـ :D:D:D

عموما الحل هو عبارة عن البرنامج كامل اليكم الحل :

#include

#include

#include

void main()

{

int i, j, k, l, m, n, p, q, r, s;

register int t;

int row1[3], row2[3], row3[3];

int num;

char ch;

printf("Enter any number : ");

scanf("%d", &num);

for(i=1; i :o

لذلك إذا لم يظهر الكود بالشكل المطلوب أو ولم تستطع قصه ولصقه فلقد أرفقت ملف txt يحتوى على الكود مع الرد أيضاً..

ايضاً أحب أن أشير للمبتدئن (أمثالى) أنى استخدمت كلمة register int t; فى السطر الـ 7 تقريباً وذلك لأن كلمة Register سوف تقوم بتخزين المتغير t فى ذاكرة المعالج مما سوف يسرع بشكل ملحوظ البرنامج.. ودائما عليكم استخدام متغيرات Register لأعمق متغير فى مجموعة حلقات متداخلة...

نصيحة أخيرة لوجه الله.. لا تحاول فى أن تزيد فى الرقم المراد رسم المربع له أى لا تتعدى 10 أو 11.. وذلك لدواعى السرعة ليس إلا لأنى كما ذكرت أن الحل مكون من 11 حلقة !!.. قكلما كبر العدد كلما زادات الأحتمالات كلما زادات الحسابات فيؤدى إلى بطئ.. ولكن فى النهاية كل الأرقام تعمل :D

وشكراً جزيلاً

___________________________________

Chaos

================================

تم تعديل الكود فقط ليظهر افضل ، خضر ترزي

0

شارك هذا الرد


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

شباب أرجو منكم التعقيب..

يعنى هل عملت الطريقة معكم ؟؟

هل هناك بدائل حيث أن طريقتى بطيئة مع الأرقام الكبيرة..

بانتظاركم

_____________________________________

chaos

0

شارك هذا الرد


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

انا هذه طريقتي

ولكن لم اكتب الكود الى تسع ارقام ... ( هذا لايجات جميع الارقام 1 الى 9 التي مجموعها 17 بحيث ( a+b+c =17 ) .. ولايجاد المطلوب في السؤال فقط نزيد عمليات التكرار ( بحيث نكرر for تسع مرات فقط )

    For x = 1 To 9
For xx = 1 To 9
For xxx = 1 To 9
If (x) + (xx) + (xxx) = 17 Then: List1.AddItem _
(x & "+" & xx & "+" & xxx & "= 17")
Next
Next
Next

0

شارك هذا الرد


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

شو هذا الحكي ياشباب .. صحيح أنا ماجربت الكودات بس يوجد طرق أفضل بكثير وأقصر ...

0

شارك هذا الرد


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

حل هذه المسئلة في حالة تكرار الأعداد سوف يستغرق وقت كثير وسوف يعطي الكثير من الحلول الذي يكون نصفها متكرر وعدد الحالات الكلية هي : 2240

على كل حل هذه المسئلة من غير اعتبار تكرار الأعداد (اي لا يتم استخدام العدد أكثر من مرة) سوف يكون سريع وسوف يعطي عدد قليل من الحلول ..

لذلك أرجو التفكير أيضا في عملية عدم التكرار :)

0

شارك هذا الرد


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

الحل بسيط:D ربما:rolleyes:

نعرف مصفوفة عددية int من 9 خانات..

ونبدأ نملأ المصفوفة من رقم 1234568789 الى 987654321 عملية ملئ المصفوفة بالارقام يتم حسب الوصلة أعلاه مع التعديلات اللازمة..

وأخيرا الشرط التالي...

do { 
عملية ملء المصفوفة بالاقام من 1 الى 987654321
} while str[1]+str[2]+str[3]=17 &&str[1]+str[4]+str[9]&&.......كل الشروط المذكورة السؤال


while (--length > 0) {
char c = str[length];

else if (c == '9') { // else if it's 'Z'
str[length] = '0'; // ... then the next is '0'
continue; // ... and carry to the next character
}
else c++; // else increment the character

str[length] = c; // store the new character
break; // and exit
}
}

int main(int argc, char* argv[])
{
char str[] = "00000000"; // the base string
const int length = sizeof(str) / sizeof(str[1]) - 1; // the length of the string

do {

Increment(str, length); // Increment the string
} while ((int)str[1]+(int)str[2]+(int)str[3]!=17 || (int)str[1]+(int)str[3]+(int)str[9]!=17 || .......الخ)

cout << str << endl; // print the string
return 0;
}


صح؟؟؟؟؟

طبعا اذا كان الحل صحيح فهو من جهود هاني! (راجع الوصلة)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
int x[][] = { {0 , 0 , 0 } , { 0 , 0 , 0 } { 0 , 0 , 0 } } ;

void rowsAndCol(int RC[][] , int & numberOfRow) ;
{ int r = 0 ;
for ( int x = 1 ; x <10 ; x++ )
for ( y = 1 ; y < 10 ; y++ )
for ( z = 1 ; z < 10 ; z++ )
if (x + y + z = 17 )
{ RC[r][0] = x ; RC[r][1] = y ; RC[r][2]; r++ }
}



bool Sum(int RC[][] , x , y , z)
{
for( int q = 0 ; q < 3 ; q++)
if (RC[x][q] + RC[y][q] + [z][q] == 17 )
return true ;
return false ;
}

void display(int RC[][] ,int uu )
{
for( int e = 0 ; e < 3 ; e++)
cout << RC[uu][e] << " " ;
cout << endl ;
}

void main()
{
int RC[50][3] ;
int r ;
rowsAndCol(RC[][],r) ;
bool found = false ;

for ( int x = 0 ; x < r & !found ; x++ )
for ( int y = 0 ; y < r & !found ; y++ )
for ( int z = 0 ; z < r && !found ; z++ )
if ( sum(RC , x , y , z) )
found = true ;


display( RC[][], x) ;
display( RC[][] , y) ;
display ( RC[][] , z) ;

}

0

شارك هذا الرد


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

كيف حلي صحيح ولا لا ؟؟

ترا الى الان ما راجعته فاحتمال تكون فيه اغلاط

لكن الفكرة بشكل عام هي كالتالي

-حفظ جميع المحاولات الناجحة لاضافة ثلاثة اعداد يكون ناتجها 17 في array of integers

- المقارنة مابين هذه arrays ثلاثة ثلاثة (لانه عندنا ثلاث اسطر) وهذه عملتها بواسطة for loop

0

شارك هذا الرد


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

على فكرة

كيف تخلون الكود محطوط وسط المربع الابيض هذا ؟ اللي فيه سحاب من جهة اليمين

0

شارك هذا الرد


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

hi semelak,

use code2 instead of php or code..

your code is long.. there should be another way..

0

شارك هذا الرد


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

void main()
{int x[9] = {1,1,1,1,1,1,1,1,1} ;
int row = 8 ;
bool found ;
while ( !found)
{ increment(x,row) ;
found = checkSum(x) ;
}
}

bool checkSum(int x[])
{ int ans1, ans2 , ans3 ;
for(int r = 0, w =1 , m =2 ; r < 9 ; r = r+ 3 , w=w+3 ,m=m+3)
{ ans1 += x[r] ; ans2 += x[w] ;ans3 += x[m] ; }

if ( (ans1 == 17) && (ans2 == 17) && (ans3 == 17) )
{ ans1 = 0 ; ans2 = 0 ; ans3 = 0 ;
for( r = 0 , w = 3 , m = 6 ; r < 3 ; r++ , w++ , m++)
{ ans1 += x[r] ; ans2 += x[w] ;ans3 += x[m] ; }
if ( (ans1 == 17) && (ans2 == 17) && (ans3 == 17) ) return true ;
}
return false ;
}

void increment(int x[] , int & row)
{ if(x[row] == 9)
{ x[row] = 0 ; row--)
else x[row]++ ;
}

الله يستر

دحين كمان تقللي الكود طويل

اجل اش هو الكود القصير هذا :confused:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

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

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