-2

我编写了一个程序以螺旋形式打印矩阵,但它仅适用于 3*3。如何使它对所有维度都有用。

#include<iostream.h>
#include<conio.h>
void main()
{
    int i,j,k=1,l=0;
    int n;
    clrscr();
    cout<<"Enter the number of row : ";
    cin>>n;
    int a[3][3];
    cout<<"Matrix Form : "<<"\n";
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[i][j]=i*n+(j+1);
            cout<<a[i][j]<<"\t";
        }
        cout<<"\n";
    }
    cout<<"Spiral form"<<"\n";
    for(i=k;i<n;i++)
    {
        cout<<a[k][i]<<"\t";
    }
    k++;
    for(i=k;i>=0;i--)
    {
        cout<<a[k][i]<<"\t";
    }
    k--;
    for(i=k;i>=0;i--)
    {
        cout<<a[i][l]<<"\t";
    }
    for(i=k;i<n;i++)
    {
        cout<<a[l][i]<<"\t";
    }

    getch();
}
4

2 回答 2

0

假设代码正常工作,您需要对这一行采取行动:

int a[3][3];

最简单的方法是使用 C++ std::vector

std::vector<std::vector<int> > a(n, std::vector<int>(n));

记得也#include <vector>一样。

于 2015-06-08T10:30:40.343 回答
0

我尝试使用 c 通过使用数组中行和列的增量和减量来生成 3*3 螺旋矩阵,然后找出矩阵的主对角线和对角线的总和。我的代码如下

#include<stdio.h>
#define n 3   
int main()
{
int m=n/2,i,j,a[10][10],c=1,sum=0,s=0;
for(i=m,j=m;j<n;j++)
{
          a[i][j]=c;
          c++;
       }
       j--;
       i++;
       while(j>=0)
       {
           a[i][j]=c;
           c++;
           j--;
       }
       i--;
       j++;
       a:
  if(i>=0)
  {
       a[i][j]=c;
       c++;
       i--;
   goto a;
  }
       i++;
       j++;
       b:
       if(j<n)
       {
       a[i][j]=c;
       c++;
       j++;
       goto b;
       }
for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        printf("\t%d",a[i][j]);

    }printf("\n");
}
for (i = 0; i <n; i++)
        {
            sum = sum + a[i][i];
            s=s+a[i][n-i-1];
        }
        printf("sum of diagonals is d1: %d d2: %d d1+d2: %d",sum,s,s+sum);
return 0;
}

输出: 点击这里查看输出

于 2018-01-25T18:50:01.570 回答