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

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

مغلق
بدأه هاني الأتاسي في 16 مايو 2002 · 19 رد · 2,677 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدينا مربع يحتوي على 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

:)

Coding on the Cloud and for the Cloud!

My Blog

#2

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

Coding on the Cloud and for the Cloud!

My Blog

#4

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

Coding on the Cloud and for the Cloud!

My Blog

#5

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

بس n عدد فردي

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

#6

طيب عادي تتكرر الأرقام ؟؟

#7

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

Coding on the Cloud and for the Cloud!

My Blog

#8

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

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

Coding on the Cloud and for the Cloud!

My Blog

#9

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

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

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

فى هذه المسألة غسلت رأسى 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

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

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

#10

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

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

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

بانتظاركم

_____________________________________

chaos

#11

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

ولكن لم اكتب الكود الى تسع ارقام ... ( هذا لايجات جميع الارقام 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
#12

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

Coding on the Cloud and for the Cloud!

My Blog

#14

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

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

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

Coding on the Cloud and for the Cloud!

My Blog

#15

الحل بسيط: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;
}

صح؟؟؟؟؟

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

#16
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) ; 

}
#17

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

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

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

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

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

#18

على فكرة

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

#19

hi semelak,

use code2 instead of php or code..

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

Coding on the Cloud and for the Cloud!

My Blog

#20
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:

هذا الموضوع مغلق.

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