蛇形矩阵


题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5

样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
c++解法如下:
#include <iostream>
using  namespace  std;
int  main()
{
    const  int  N = 101;
    int  arrary[N][N]; /**存储蛇形矩阵*/
    int  i,j;
    int  n,num,cnt;
    for (i=0;i<N;i++)
    {
    for (j=0;j<N;j++)
    arrary[i][j]=0;
    }
     arrary[0][0]=1;  
    cin >> n;
    cnt = n-1;
    num = n*(n+1)*0.5;
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++){
         if (i+j==cnt)   arrary[i][j]=num--;
         
         if (i+j==cnt&&j==0)
         {
             cnt--;
             i=0;j=0;
         }
        }
   
     for (i=0;i<n;i++)
     {
         for (j=0;i+j<=n-1;j++)
         {
     if (i+j<=n-1&&i+j+1>n-1)
             cout << arrary[i][j] ;
             else
             cout << arrary[i][j] <<  " " ;
         }
         cout <<  "\n" ;
     }
     //cout << "Hello world!" << endl;
 
     return  0;
}

 第二种蛇形:

#include <iostream>
#include "cmath"
using namespace std;
/*
*作者:浅滩
*类型:蛇形矩阵(蓝桥杯普及题)
*修改时间:2019.1.29
*题目描述:蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
*程序不足:用到了数组浪费了很多的空间
*/
/*
与之前蛇形矩阵有一点不同 
1 2 6 7 15
3 5 8 14
4 9 13
10 12
11
*/
const int N = 101;
int arrary[N][N];
void deal(int &num,int flag,int &cnt,int n)
{
int i,j;
if(flag==1)
{
       for(i=0;i<n;i++){
       for(j=0;j<n;j++){
       if(i+j==cnt)   arrary[i][j]=num--;

       if(i+j==cnt&&j==0)//一斜行赋值完毕
        {
        cnt--; return;
        }
       }  
       }
}
else
{
       for(i=n-1;i>=0;i--){
       for(j=0;j<n;j++){
       if(i+j==cnt)   arrary[i][j]=num--;

       if(i+j==cnt&&i==0)//一斜行赋值完毕
        {
        cnt--; return;
        }
       }  
       }            
    
}
    
}
int main()
{
   
   int i,j;
   int n,num,cnt;
   for(i=0;i<N;i++)
   {
       for(j=0;j<N;j++)
       arrary[i][j]=0;
   }
   
    cin >> n;
    cnt = n-1;
    num = n*(n+1)*0.5;
    for(i=n-1;i>=0;i--)
    {
        deal(num,pow(-1,i),cnt,n);
    }

    for(i=0;i<n;i++)
    {
        for(j=0;i+j<=n-1;j++)
        {
            if(i+j<=n-1&&i+j+1>n-1)
            cout << arrary[i][j] << "\n";
            else
            cout << arrary[i][j] << " ";
        }

    }
     

    return 0;
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM