114 void fillDoubly(int square[20][20], int n){
115
116 int i, j, k=0, l=0, counter=0, test[400]={0}, diff=n/4-1;
117
118 for(i=0;i<n;i++) //first nested for loops for part 1)
119 for(j=0;j<n;j++){
120 counter++;
121 if( i=j || j=(n-1-i) ){
122 {
123 square[i][j] = counter;
124 test[counter-1] = 1;
125 }
126 }
127 }
128
129 for(i=n-1;i>=0;i--) // for part 2)
130 for(j=n-1;j>=0;j--){
131 if(square[i][j]==0){
132 while(test[k]!=0){
133 k++;
134 }
135 test[k]=1;
136 square[i][j]=k+1;
137 }
138 }
139 }
所以基本上,我必须生成 4 阶的幻方,即行和列可以被 4 整除。
我得到了算法,它是
- 遍历数组并填充对角子集
- 向后遍历数组并填充其余部分
我已经用上面的代码完成了 4x4 数组,它扩展到 8x8、12x12 等,但我被困在第 1 部分),即填充对角线子集(例如,将 8x8 拆分为 4x4 并取该对角线)。 ..我不知道该怎么做,只设法填写对角线本身
if( i=j || j=(n-1-i) ){
tldr,以上是我用来知道它是否是对角线的条件,有什么建议我可以改变条件以知道它是否是对角线子集而不是对角线?
谢谢