2
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.Ç - 二維數組 - 幻方爲了4
我提供的算法是
- 遍歷陣列和在對角的子集填充
- 向後遍歷數組和在靜止
我已經做了與上面的代碼的4×4陣列,這延伸到8x8,12x12等 但我停留在部分1)這是填充在對角線子集(例如分裂成8×8×4,並採取對角代替)......我不知道該怎麼做,只設法在對角線本身填補
if(i=j || j=(n-1-i)){
tldr,以上是我用它來知道如果條件它的對角線,任何建議如何我可以改變條件知道它是否是對角子集不是對角線?
感謝
關於您發佈的代碼的說明:'i = j || j =(n-1-i)'涉及'i'或'j'的分配。我想你想用'=='做比較,即'i == j || j ==(n-1-i)'? – imp25
請打開編譯器的基本警告。一旦他們開始,把他們當成錯誤。如果您收到警告而您不想修復,請使用編譯器選項禁用該警告。任何警告都是潛在的錯誤,如果您採取0警告政策,您不需要在思考警告是否正確時使用思維能力。它有助於保持你的理智! – hyde
可能的重複http://stackoverflow.com/questions/4372554/magic-square-program-c。 –