פורסם 2011 בספטמבר 3014 שנים שלום,רציתי לדעת אם מישהו יוכל לעזור לי לכיוון או לתת איזה אלגוריתם אשר ידפיס לי את המטריצה הבאה : 1 | 2 | 3| 4 | 5 | 6 |724|25|26|27|28|29|823|40|41|42|43|30|922|39|48|49|44|31|1021|38|47|46|45|32|1120|37|36|35|34|33|1219|18|17|16|15|14|13בעיקרון אכפת לי מהיעילות ומהדרך עצמה.
פורסם 2011 בספטמבר 3014 שנים הכי פשוט ויעיל לבנות את המטריצה בזכרון, ורק אז להדפיס אותה.תחשוב שיש לך "איש" שמתחיל בפינה של המטריצה (איפה שצריך להיות 1) ואז הולך לאורך המסלול של המספרים. איזה מידע האיש הזה צריך לזכור? איך הוא מחליט מתי לפנות, ולאן?
פורסם 2011 באוקטובר 414 שנים אתה יכול לפתור את השאלה עם לופ ו- counter שבתוכו יש ארבעה for-ים שיבנו את הצלעות של המרובע, כך שכל פעם הצלע קטנה.התרגיל הוא משחק עם האינדקסים של המטריצה.
פורסם 2011 באוקטובר 414 שנים היה לי קצת זמן לשחק עם זה (נראה לי שפותח הדיון לא יחזור).איך היית הופך את התוכנית לפחות מסורבלת ?#include <stdio.h>#define N 7int main () { int matrix[N][N]; int counter = 1; for (int i = 0 ; i < (N+1)/2 ; i++) { for (int j = N-i-1; j > i; j--) // upper line matrix[j][i] = counter++; for (int j = i ; j < N-i ; j++) // left line matrix[i][j] = counter++; for (int j = i+1 ; j < N-i ; j++) // bottom line matrix[j][N-i-1] = counter++; for (int j = N-i-2; j > i ; j--) // right line matrix[N-1-i][j] = counter++; } for (int j = 0 ; j < N ; j++) { // print matrix for (int i = 0 ; i < N ; i++) { printf("%d\t", matrix[i][j]); } printf("\n"); } return 0;}
פורסם 2011 באוקטובר 814 שנים אפשר לעשות את זה בלולאת while אחת. מאתחלים את המטריצה ל0 וממלאים אותה במסלול ספירלי לפי אלמנט עולה. כלומר, לוקחים "פנייה שמאלה" בכל פעם שמגיעים לקצה המטריצה או נתקלים באלמנט שונה מ0.עוצרים כשהאלמנט הנוכחי שווה לN*N.#include <stdio.h>#define N 7int main () { int i = 0, j = 0, tmp; int d_i = 1, d_j = 0, count = 0, matrix[N][N] = {0}; while (count != N*N) { matrix[i][j] = ++count; /* advance */ i += d_i; j += d_j; if (i == N || j == N || matrix[i][j] != 0){ /* reached end of matrix or nonzero element */ /* step back */ i -= d_i; j -= d_j; /* turn left */ tmp = d_i; d_i = - d_j; d_j = tmp; /* advance */ i += d_i; j += d_j; } } /* print matrix */ for (j = 0 ; j < N ; j++) { for (i = N-1 ; i >= 0 ; i--) { printf("%d\t", matrix[i][j]); } printf("\n"); } return 0;}
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.