蛇形矩陣


題目描述
蛇形矩陣是由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