隨機生成九宮格-交換法

這次隨機九宮格之陣列中的陣列是用交換法來做的。
交換法的交換對象是由執行格(i,j當下的值)來配合亂數選擇其陣列後面的位置進行交換。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(0));
int i,j,n[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(i=0;i<3;++i){
for(j=0;j<3;++j){
int r,m,b,k,t;
r=rand()%(9-k)+k; //r值是用來選擇欲交換的對象,k是將以交換的在下一輪不會被選擇到。
m=r/3;//m值為列/%兩個皆可,但必須要和行錯開用。
b=r%3;//m值為行,若列用%,行則用/,必須錯開,相同則只有0.0,1.1,2.2。
t=n[i][j]; //交換法開始。
n[i][j]=n[m][b];
n[m][b]=t;
k++; //每次交換完成需+1,屆時取r值才可以去除以交換完成的。
}
}
for(i=0;i<3;++i){  //列印模式。
for(j=0;j<3;++j){
printf("%d ",n[i][j]);
}
printf("\n");
}
return 0;
}
這方法的可讀性比較直觀,但與前一篇使用函式來處理是各有優缺點。

留言