【问题标题】:spiral matrix using c program使用c程序的螺旋矩阵
【发布时间】:2015-06-08 10:25:00
【问题描述】:

我写了一个程序以螺旋形式打印矩阵,但它只适用于 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();
}

【问题讨论】:

标签: c++ matrix spiral


【解决方案1】:

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

int a[3][3];

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

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

也记得#include &lt;vector&gt;

【讨论】:

    【解决方案2】:

    我尝试使用 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;
    }
    

    输出: click here to view output

    【讨论】:

    • 我认为问题在于其他维度,因为他说他的代码适用于 3*3。
    猜你喜欢
    • 2014-09-16
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多