טוב יש לי שאלה, אני צריך לבנות תוכנה בC# עם מערך דו מימד לא ידוע שבודקת אם כל התאים במערך שונים זה מיזה(TRUE) איך אני עושה את זה?
מישהו יכול להביא לי את הדרך הכי קלה?
זה ממש חשוב ודחוף!!
תודה
טוב יש לי שאלה, אני צריך לבנות תוכנה בC# עם מערך דו מימד לא ידוע שבודקת אם כל התאים במערך שונים זה מיזה(TRUE) איך אני עושה את זה?
מישהו יכול להביא לי את הדרך הכי קלה?
זה ממש חשוב ודחוף!!
תודה
|
|
הינה פתרון בC#, אני לא בטוח שזו היעילות המקסימליתclass Program
{
static void Reader(int[,] mat)
{
for (int i = 0; i < mat.GetLength(0); i++)
for (int j = 0; j < mat.GetLength(1); j++)
mat[i, j] = int.Parse(Console.ReadLine());
}
static bool Check(int[,] mat, int r, int c)
//r - row num c - column num
{
for (int i = 0; i < mat.GetLength(0); i++)
for (int j = 0; j < mat.GetLength(1); j++)
if (mat[i, j] == mat[r, c] && (r != i || c != j))
return false;
return true;
}
static void Main(string[] args)
{
int[,] mat = new int[2, 3];
Reader(mat);
for (int i = 0; i < mat.GetLength(0); i++)
{
for (int j = 0; j < mat.GetLength(1); j++)
if (!Check(mat, i, j))
{
Console.WriteLine("There are equal cells");
return;
}
}
Console.WriteLine("All the cells are different");
}
}
נערך לאחרונה על ידי hapoel19; 14-02-2011 בשעה 07:57.
יש דרכים בתכנון דינאמי שיתנו לך פתרון בסיבוכיות נמוכה.
אני הייתי מקצה מערך מערך חד מיימדי חדש, ממיין אותו, ועובר עליו פעם נוספת לראות אם יש איברים סמוכים זהים.
סיבוכיות זמן: mn)^2+mn+mn) יותר יעיל מהפתרון שהוצע.
אם עוד פעם אחת אתה תפרסם את האתר הזה בחתימה שלך, אתה תושעה לצמיתות.
אני ממש לא מבין למה את המשתנה mat שמת פה כשהוא לא אמור להשתלב בbool.}
static bool Check(int[,] mat, int r, int c)
//r - row num c - column num
{
for (int i = 0; i < mat.GetLength(0); i++)
for (int j = 0; j < mat.GetLength(1); j++)
if (mat[i, j] == mat[r, c] && (r != i || c != j))
return false;
return true;
ואם כבר bool - למה בתוך הסוגריים ישנם משתנים מסוג int ?
לכותב האשכול, מה שלומך?
הנה קוד שרשמתי בשבילך, הרבה יותר קליל.
קוד:for(int i =0; i < arr.GetLength(0); i++) { for(int j = 0; j < arr.GetLength(1); j++) for(int k = 0; k < arr.GetLength(0); k++) for(int h = 0; h < arr.GetLength(1); h++) if(arr[i][j] == arr[k][h]) counter++; if (counter ..... ... }
* שים לב כי אם אתה משתמש במערך עליך לשים לולאת while ובנוסף לכך עוד פסקת פקודות שהתחלתה דומה לזו:
קוד:static void Reader(int[,] mat