2012-12-09 48 views
0

我需要總結和輸出行,列和主對角線。有人可以告訴我我做錯了什麼嗎?這是我得到使用的代碼,但我似乎無法得到它輸出我的總和。我在下面的代碼中提出了一個評論,我相信我的問題存在,它開始總結和停止。我很感激任何幫助,因爲我無法自行解決這個問題。輸出應該是一個3 x 3的矩陣,第四行和第四列中的行,列和對角線的總和等於15.我的輸出不是將行,列和diagonls相加。幻方,我無法得到這個總和的行,列和對角線

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 

int n = 3; 
int row, col, r, c, i, j, k, diag=0; 
int magic[19][19]; 
ofstream fout; 
fout.open("p4-out.txt"); 

for(j=0 ; j<n+1 ; j++){ 
    for(k=0 ; k<n+1 ; k++) 
    magic[j][k] = 0;} 

row=1; col=(n+1)/2; 
magic[row-1][col-1]=1; 

for(i=2 ; i<=(n*n) ; i++){ 
    row-=1; col-=1; 
    if(row==0 && col==0){col++; row+=2;} 
    else if(row==0) row=n; 
    else if(col==0) col=n; 
    else if(magic[row-1][col-1]!=0) 
    {col++; row+=2;} 
    magic[row-1][col-1]=i;} 

for(r=0; r<n; r++){      
    for(c=0; c<n; c++) 
    magic[r][n]+=magic[r][c];} 

for(c=0; c<n; c++){ 
    for(r=0; r<n; r++) 
    magic[n][c]+=magic[r][c];} 

for(r=0; r<n; r++){ 
    magic[n][n]+=magic[r][r];} 

for(r=1; r<(n-1); r++){ 
    c = n - r + 1; 
    diag+=magic[r][c];}    

for(r=0; r<(n+1) ; r++){ 
    fout << endl; 
    for(c=0; c<(n+1) ; c++) 
    {fout << setw (5) << magic[r][c];} 
    fout << endl;} 
return 0; 
} 


          // This my output. 
         15 <---// I need this 15 to go 

     6 1 8 15      | 
               | 
     7 5 3 15      | 
               | 
     2 9 4 15      | 
               | 
[15] 15 15 15 15      | 
^-------------<------------<----------<-------| 
here 
+0

什麼是預期的輸出,這有什麼實際的輸出?你是否嘗試過在調試器中運行它,逐行執行,同時檢查變量和邏輯?另外,請嘗試在http://codereview.stackexchange.com/上提問。 –

回答

1

使用正確的索引將填滿你的sum行和列也嘗試:

for(r=0; r<n; r++){      //Where it should start summing 
    for(c=0; c<n; c++){ 
     magic[r][n]+=magic[r][c];} 
    } 

for(c=0; c<n; c++){ 
    for(r=0; r<n; r++){ 
     magic[n][c]+=magic[r][c];} 
} 
for(r=0; r<n; r++){ 
     magic[n][n]+=magic[r][r]; 
}  
for(r=0; r<n; r++){ 
     c = n - r + 1; 
     diag+=magic[r][c];}    //where it should stop summing 
+0

我抹掉了我最後的評論,因爲我錯了。有效。非常感謝你。謝謝,謝謝 – Aaron

+0

如果有人還在讀這篇文章,主要有兩條對角線,一條從左上角到右下角,另一條從左下角到右上角。我需要從左下角到右上角的輸出到左下角,並沿着對角線的方向運行。 – Aaron

+0

我看到你編輯了這個問題。你必須確保你正在用適當的索引填充'magic [19] [19]'矩陣以獲得所需的輸出。即讓第一列空(0)開始從1向上的所有col索引,稍後可以向magic [n] [0]單元添加第二個對角線的總和。 – srbhkmr