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