2015-02-08 2 views
-2
enter code here 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace testing_random 
{ 
    class Program 
    { 
     static void Main(string[] args) 
    { 

     int n = 4; 
     int[,] a = new int[n,n];//declaring the matrix 
     Random o = new Random(); 
     a[0,0] = o.Next(n); 
     for (int i = 1; i < n; i++)//filling the first line 
     { 
      int d = 1; 
      while (d != 0) 
      { 
       a[i,0] = o.Next(n); 
       d = 0; 
       for (int j = 0; j < i; j++) 
        if (a[i,0] == a[j,0]) 
         d++; 
      } 
     } 
     for (int i = 1; i < n; i++)//filing the first column 
     { 
      int d = 1; 
      while (d != 0) 
      { 
       a[0, i] = o.Next(n); 
       d = 0; 
       for (int j = 0; j < i; j++) 
        if (a[0, i] == a[0, j]) 
         d++; 
      } 
     } 
     for (int k = 1; k < n; k++)//filling the rest of the matrix 
     for (int i = 1; i < n; i++) 
     { 
      int d = 1; 
      while (d != 0) 
      { 
       a[i, k] = o.Next(n); 
       d = 0; 
       for (int j = 0; j < i; j++) 
        if (a[i, k] == a[j, k]) 
         d++; 
       for (int j = 0; j < k; j++) 
        if (a[i, k] == a[i, j]) 
         d++; 
      } 
     } 

     for (int i = 0; i < n; i++) 
     { 
      for (int j = 0; j < n; j++) 
       Console.Write("{0} ", a[i, j]); 
      Console.WriteLine(); 
     } 

     Console.ReadLine(); 
     } 
    } 
} 

Выход должен быть матрицей 4 * 4, где каждый столбец и каждая строка содержат каждое число один раз. Проблема заключается в том, когда я запускаю код, а не каждый раз, когда я получаю вывод, я думаю, что проблема заключается не в каждом наборе первой строки, а в столбце, который может потребовать, я получаю бесконечный цикл. Я хочу ограничить время работы приложения до 100 мс на пример, поэтому, если матрица не заполнена, программа перезагрузится Какой код кода мне не хватает?Я делаю судоку на C#

ответ

0

заменить while(d != 0) на петлю, которая рассчитывает до некоторого очень большого максимального количества итераций. (Попробуйте 1000, 100000, что угодно.)

+0

Я думаю, что это сработало. Спасибо – Elie

+0

Пожалуйста, дайте нам знать, если это сработает. Как только он сработает, пожалуйста, «примите» ответ, который был вам наиболее полезен. –

0

Вы пытаетесь случайно вставить числа между 1-4 в первой строке массива? Если это так, гораздо более простой способ сделать это.

Вы можете сгенерировать 4 числа, которые нужно вставить в массив, а затем просто просмотреть первую строку массива и задать каждое значение.

Random rnd = new Random(); 
var randomNumbers = Enumerable.Range(1, 4).OrderBy(i => rnd.Next()).ToArray(); 

for (int i = 0; i < n; i++) 
{ 
    a[i, 0] = randomNumbers[i]; 
} 
Смежные вопросы