-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 に答える