פורסם 2006 במאי 1019 שנים האלגוריתם מקבל מערך דו ממדי בגודל 6 על 6 ובודק אם יש בו רביעייה k (זו רביעיה של מספרים שצמודים במערך בצורה של ריבוע לדוגמה יש מערך בגודל 6 על 6אז האלגוריתם מחפש אם בתוך המערך יש תת מערך בגודל 2 על 2 שבו כל באיברים שווים).הנה האלגוריתם:#include<stdio.h>#include<conio.h>#include<stdlib.h>typedef int arr[6][6];int chack(arr a){ int i,z,num; for(i = 0; i < 6; i++) { for(z = 0; z < 6; z++) { if((a[z] == a[z+1])&&(a[z+1] == a[i+1][z])&&(a[i+1][z] == a[i+1][z+1])) { num = 1; } else { num = 0; } } } return num;}void main(){ clrscr(); int i,z,numb; arr mar; printf("enter 36 numbers\n"); for(i = 0; i < 6; i++) { for(z = 0; z < 6; z++) { scanf("%d",&mar[z]); } } numb == chack(mar); printf("\n%d",&numb);}
פורסם 2006 במאי 1019 שנים אתה צריך משהו כמו:int array[6][6];for (i = 1; i < 6; ++i) for (j = 1; j < 6; ++j) { int x = array[i-1][j-1]; if ( (x == array[i-1][j]) && (x == array[i][j-1]) && (x == array[i][j]) ) return true; }(לא צריך לעבור על כל ה-36 איברים, אלא רק על 25)
פורסם 2006 במאי 1019 שנים מחבר זה בדיוק מה שאני רשמתי רק בצורה אחרת וזה לא עובדזה דופק לי איזה מספר בפלט של 29,345 או משהו כזה יש מצב שזה המספר הכי גדול ב-int.
פורסם 2006 במאי 1019 שנים הנה הבעיה שלך: printf("\n%d",&numb);ב-printf לא צריך לתת את ה-&, אלא אתה צריך לתת את המשתנה עצמו (בניגוד ל-scanf).חוץ מזה יש לך עוד כמה בעיות:1. אתה יוצא מגבולות המערך - אתה רץ מ-0 עד 5, ולכן כ-z==5 או i==5 אתה מנסה לבדוק תא שנמצא מחוץ למערך.(במקרה של z=5 אתה לא בדיוק יוצא מהגבולות אלא פשוט גולש לשורה הבאה, אבל ב-i=5 אתה מגיע לשורה לא קיימת)2. שים לב שכל פעם שאתה בודק ריבוע, אתה משנה את הערך של num. לכן, גם אם תמצא ריבוע מתאים, אז הבדיקה של הריבוע שאחריו תבטל את הבדיקה הקודמת.... מה שצריך לעשות הוא לאתחל מראש את num ב-0, ואז רק כשאתה מוצא ריבוע מתאים לעשות num=1 (ולא לעשות num=0 אם אתה לא מוצא). אפשרות נוספת היא לעשות מה ש-bla7 עשה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.