蛇形数组,手动输入与自动安排数据

   第一次写博客,先来个蛇形数组,
   代码量其实只有一半,我写了手动输入数据和自动安排数据两种情况,其实本质是一样的,几乎是复制粘贴后进行很小的改动。
   我的思路主要是“蛇”要绕圈,绕完外圈绕内圈,就成了一个for循环,绕圈要分四步进行,找出其中的规律后进行编写。
   欢迎大佬给我提出意见指正或给出更简单的方法。
#include<iostream>
#include<string>
using namespace std;
int main()
{    
 cout<<"输入1运行程序,输入0结束程序\n";
    int v;
    cin>>v;
    while(v)    
    {    
        cout<<"输入蛇形方阵的行列\n";
        int a;    
        cin>>a;        
        const int n=a;        
        int j=0,i=0;        
        int x[n][n];        
        cout<<"手动输入数据请按1,自动安排数据请按0\n";
        int c;        
        cin>>c;        
        if(c)        //程序由if else分成两部分
        {                 //该部分为手动输入
           cout<<"请输入方阵的数据\n";         
           for(int u=0;u<n/2;u++)         
           {          
             for( i=u,j=u;j<n-u;j++)   //1     第一步       
             {            
                 cin>>x[i][j];            
             }            
            for( i=u+1,j=n-(u+1);i<n-u;i++)   //2  第二步          	   		  
             {
               cin>>x[i][j];            
             }            
            for( j=n-(u+2),i=n-(u+1);j>=u;j--) //3  第三步
            {                          
              cin>>x[i][j];            
            }            
            i=n-(u+2);j=u;           
             while(i>u)       //4            第四步
             {               
              cin>>x[i][j];               
              i--;            
             }         
           }         
           if(n%2)         //奇数与偶数不一样的部分分开讨论
           {        
             cin>>x[n/2][n/2];      
           }
        }       
        else          //自动安排数据部分
        {              //同上部分内容几乎一样
          int p=1;            
          for(int u=0;u<n/2;u++)         
           {              
             for( i=u,j=u;j<n-u;j++)   //1     
              {               
                x[i][j]=p;                 
                p++;                
              }            
             for( i=u+1,j=n-(u+1);i<n-u;i++)   //2 
              {              
                x[i][j]=p;                
                p++;          
              }            
             for( j=n-(u+2),i=n-(u+1);j>=u;j--)   //3   
              {              
                x[i][j]=p;                
                p++;           
              }            
              i=n-(u+2);
              j=u;            
              while(i>u)       //4            
              {              
                x[i][j]=p;                
                p++;                
                i--;           
              }       
          }         
           if(n%2)      
            {          
              x[n/2][n/2]=n*n;       
            }        
      }    
      for( i=0;i<n;i++)    
      {      
        for( j=0;j<n;j++)        
        {        
            cout<<x[i][j]<<'\t';        
        }        
        cout<<'\n';    
      }    
      cout<<"\n\n\n程序运行完毕";    
      cout<<"输入1继续运行程序,输入0结束程序\n";    
      cin>>v;    
   }        
   system("pause");    
   return 0;   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值