题目来源: http://www.programfan.com/acm/show.asp?qid=72#comment
蛇行矩阵
Problem
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
Input
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
Output
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。
矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
Sample Input
5
Sample Output
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
解法如下:
核心在于:顺次给相应的 a[row--][col++] 位置填上i++;
#include<iostream>
#include<stdlib.h>
using namespace std;
int a[10][10]={0};
void show(int n)//显示蛇形矩阵
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[i][j])
{
cout<<a[i][j]<<" ";
}
}
cout<<endl;
}
}
void snake(int n)
{
int cnt=1;
int i=1;
for(int j=0;j<n;j++)
{
int row=cnt-1;
int col=0;
while(row>=0&&col<=cnt)
{
a[row--][col++]=i++; //每次都是从a[cnt][0] 开始斜向上递增 直至row=0位置
}
cnt++;
}
}
int main(int argc, char* argv[])
{
int n;
cin>>n;
cout<<endl;
snake(n);
show(n);
system("PAUSE");
return 0;
}