2013-12-01 2 views
0

Так что мне нужно напечатать число диагоналей, содержащих только нули в матрице. Я сделал это по обратной диагонали, но не по основному. Я просто не могу понять. так это то, что я сделал до сих пор:Матричные диагональные нули

using namespace std; 
int main() 
{ 
int n,b=0; 
cin>>n; 
int a[n][n]; 
for (int i=0;i<n;i++) 
    for (int j=0;j<n;j++) 
{ 
    cin>>a[i][j]; 
} 
int j,i; 
for(int br=0; br<2*n-1; br++) 
{ 


    if(br<n) { 
     i=br; 
    j = 0; 
    } 
    else { 
     i = n-1; 
    j = (br+1)%n; 
    } 
    bool p=1; 
    while(i>=0 && j<n) 
    { 

    if(a[i][j]!=0) 
     { p=0; 
     break;} 
     i--; 
    j++; 
    } 
    if(p) 
    b++; 
} 

cout<<endl; 
cout<<b; 
} 

ответ

1

Разве это не очевидно? Добавить еще один цикл:

for(int br=0; br<2*n-1; br++) 
{ 
    if(br<n) 
    { 
     i=n-br-1; 
     j = 0; 
    } 
    else 
    { 
     i = 0; 
     j = (br+1)-n; 
    } 
    bool p=1; 
    while(i<n && j<n) 
    { 
     if(a[i][j]!=0) 
     { 
      p=0; 
      break; 
     } 
     i++; 
     j++; 
    } 
    if(p) 
    b++; 
} 

(я оставил в некоторых сомнительных вещах, как bool p=1; сделать параллельный понятнее.)

+0

Спасибо так много! – user103220

0

Во-первых, это не действует C++:

cin>>n; 
int a[n][n]; 

п должна быть постоянная времени компиляции. Else используют вектор векторов.

Во-вторых, если вы должны пройти все диагонали, то вы должны иметь четыре набора вложенных циклов для:

for (int row = 0; row < n; row++) 
    for (int r=row,col=0; r < n && col < n;) { col++; r++;/*...*/} 

for (int col = 0; col < n; col++) 
    for (int c=col,row=0; row < n && c < n;) { c++; row++;/*...*/} 

for (int row = 0; row < n; row++) 
    for (int r=row,col=0; r >= 0 && col < n;) { col++; r--;/*...*/} 

for (int col = 0; col < n; col++) 
    for (int c=col,row=0; row < n && c >= 0;) { c--; row++;/*...*/} 
Смежные вопросы