English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

如何用C語言寫
在N*N的表格內
隨機產生0~N*N-1 的數字
而且不重複...

2006-12-18 07:21:58 · 3 個解答 · 發問者 1 in 電腦與網際網路 程式設計

希望可以用 二維陣列方式儲存...

還要用N*N方陣 PRINT 出來

2006-12-19 14:55:27 · update #1

3 個解答

#include
#include
#define N 20

int main()
{
int num[N*N], a[N*N], b;
int i, j;

b = N*N;
srand(time(NULL));
i = 0;
do
{
j = rand() % b;
if (a[j] == 0) /* 沒產生過的才要 */
{
a[j]=1; /* 標示已經產生過 */
num[++i]=j; /* 記錄所產生的號碼 */
}
} while (i < b);

/* N 太大時 小心對不齊 */
for (i=0; i<=N-1; i++)
{
for (j = 1; j <= N; j++)
printf("%4d", num[i*N+j]);
printf("\n");
}

system("pause");
}

2006-12-18 08:46:20 · answer #1 · answered by JJ 7 · 0 0

測試可以於DEV C++正確執行
我是參照琳琳的想法做的 !!
GOOD IDEA

#include
#include
#include
#define N 10

void Printf(int [][N]);
void Srand(int [][N]);
int main()
{
int i,j,array[N][N];
for(i=0;i {
for(j=0;j array[i][j]=i*N+j+1;
}
Printf(array);//印出初始順序陣列
Srand(array);//進行亂數排序
Printf(array);//印出洗牌後的陣列

system("pause");
}
void Printf(int array[][N])
{
int x,y;
for(x=0;x {
for(y=0;y printf("%d\t",array[x][y]);
printf("\n");
}
}
void Srand(int array[][N])
{
srand(time(NULL));
int a,b,temp,index1,index2;
for(a=0;a for(b=0;b {
index1=rand()%N;
index2=rand()%N;
temp=array[a][b];
array[a][b]=array[index1][index2];
array[index1][index2]=temp;
}
}

2006-12-20 16:39:17 補充:
CODE是你想要的  
N*N二維矩陣阿 @@
沒錯啊?!

2006-12-18 11:26:32 · answer #2 · answered by Anonymous · 0 0

用類似洗牌的方式
先產生連續的 0 ~ n*n-1 數字在 n*n 陣列
之後再利用亂數對裡面的元素做交換,把它弄亂.

2006-12-18 08:01:56 · answer #3 · answered by 鳳琳 5 · 0 0

fedest.com, questions and answers