陣列中的陣列之亂數九宮格~~

看到題目時,我思考邏輯上是用亂數直接給予九宮格數值,
一格一格走00,01,02,10,11,12,20,21,22,並在每一格用counter驗證生成的亂數數值是否出現過(0無1有),再配合while迴圈直到生出未出現的亂數,然後再給予當下位置數值,不過似乎可讀性很差....
最近有點挫折,原本一點就通的感覺,在進入陣列後慢慢要花更多時間消耗範例裡面的用法與為什麼這樣寫的思考邏輯,好像在走天堂路.....不過解開也是很有成就就是了....

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(0));
int i,j,c;
int n[3][3];
int counter[9]={0}; ///////用於檢查生成數值是否出現過
for(i=0;i<3;++i){ /////一共3列
for(j=0;j<3;++j){ /////一共3行
while(1){
c=rand()%9+1; ////生成亂數0~9
if(counter[c-1]==0){ ////檢查生成的亂數是否出現過(有的話回到while重新生成)
counter[c-1]++; ////未出現數值則該數值計數器+1,+1後即為已使用過。
break; ////停止生成亂數,讓變數c停留該數值。
}
}
n[i][j]=c; ////將亂數新生成且未使用過的數值放入該位置。
}
}
for(i=0;i<3;++i){ /////列印迴圈-第一列、第二列、第三列
for(j=0;j<3;++j){ /////列印迴圈-第一行、第二行、第三行
printf("%d ",n[i][j]); /////列印可恨的陣列中的陣列座標位置。
}
printf("\n"); /////印完每列換行
}
return 0;
}

留言