矩阵对角线零

时间:2013-12-01 17:08:15

标签: c++ arrays matrix

所以我必须在矩阵中打印仅包含零的对角线数量。 我是通过反向对角线完成的,但不是主要的。我只是想不出来。所以这就是我到目前为止所做的:

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;
}

2 个答案:

答案 0 :(得分: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;,以使并行更清晰。)

答案 1 :(得分:0)

首先,这不是有效的C ++:

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

n应该是编译时常量。否则使用矢量矢量。

其次,如果你必须遍历所有对角线,那么你应该有四组嵌套for循环:

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++;/*...*/}