Спасибо, что помогли мне раньше. Но у меня все еще есть некоторые вопросы о программе. Как сгенерировать новое случайное число, в то время как новое случайное число равно предыдущему случайному числу? Также как перенести матрицу?Как сгенерировать новое случайное число и перенести матрицу?
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
int _tmain(int argc, _TCHAR* argv[])
{
int num2 = 0;
int num=0, i, j;
int mtx[9][9] = {0};
while (num < 3 || num > 9) {
printf("Enter an integer (3-9): ");
scanf("%d", &num);
}
do
{
srand(time(NULL));
switch (num)
{
case 3: num2 = rand() % 8;
break;
case 4: num2 = rand() % 15;
break;
case 5: num2 = rand() % 24;
break;
case 6: num2 = rand() % 35;
break;
case 7: num2 = rand() % 48;
break;
case 8: num2 = rand() % 63;
break;
case 9: num2 = rand() % 80;
break;
}
for (i=0; i < num; ++i)
for (j=0; j < num; ++j)
mtx[i][j] = num2;
}
while (num2 == num2);
for (i=0; i < num; ++i) {
for (j=0; j < num; ++j)
printf("%i ", mtx[i][j]);
printf("\n");
}
return 0;
}
Update:
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
int _tmain(int argc, _TCHAR* argv[])
{
int prevNum2 = 0;
int num2 = 0;
int num = 0, i, j; // Added initializers and loop counters
int mtx[9][9] = {0}; // Reserve enough space for the worst-case scenario
while (num < 3 || num > 9) { // Added input validation loop
printf("Enter an integer (3-9): ");
scanf("%d", &num);
}
srand(time(NULL));
do{
prevNum2 =num2;
switch (num)
{
case 3: num2 = rand() % 8;
break;
case 4: num2 = rand() % 15;
break;
case 5: num2 = rand() % 24;
break;
case 6: num2 = rand() % 35;
break;
case 7: num2 = rand() % 48;
break;
case 8: num2 = rand() % 63;
break;
case 9: num2 = rand() % 80;
break;
}
// Loop through the matrix elements we want, filling each with a random number
for (i=0; i < num; ++i)
for (j=0; j < num; ++j)
mtx[i][j] = num2;
}
while (num2 == prevNum2);
/* Do something with the matrix here (display it, etc) */
for (i=0; i < num; ++i) {
for (j=0; j < num; ++j)
printf("%i ", mtx[i][j]);
printf("\n");
}
return 0;
}
Возьмите srand() из петли. И прочитайте некоторые из многих, много вопросов здесь о генерации случайных чисел. – 2009-12-17 14:25:36
Это невероятно неэффективный способ делать то, что вы делаете. Вы хотите присвоить все цифры от '0' до' n-1' ('n = num * num') до' mtx'. Генерирование случайных чисел в диапазоне от «0» до «n-1», а затем проверка того, что он еще не сгенерирован, становится очень медленным, поскольку ваш пул доступных номеров становится меньше. Например, когда вы создали 80 таких чисел, вы знаете, что должно быть 81-м номером, но выполнение этого алгоритма, скорее всего, займет много времени, прежде чем вы найдете нужный вам номер. То, что вы ищете, - это способ перетасовки чисел между '0' и' num * num-1'. –