Link:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1007&cid=25995
被玩坏的数字三角
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 11 Accepted Submission(s) : 8
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
给出一个数字n,要求输出这样的三角形,如n=6时,输出
这个三角形有如下的特征:
1.行数为 n,即6行。
2.(1,1)位置上的数字为1
3.三角形上的数字按照图中所示方向递增。
![](http://i2.tietuku.com/eb0c9a7b289836a0.jpg)
这个三角形有如下的特征:
1.行数为 n,即6行。
2.(1,1)位置上的数字为1
3.三角形上的数字按照图中所示方向递增。
Input
第一行输入一个正整数T,代表数据的组数。每组数据包括一行,包括一个正整数n(t,n<=100),代表三角形的行数。
Output
输出题目要求的三角形。
Sample Input
1 6
Sample Output
1 2 15 3 16 14 4 17 21 13 5 18 19 20 12 6 7 8 9 10 11
Author
#include<iostream>
#include<istream>
#include<ostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<cstdio>
#include<map>
using namespace std;
int m[111][111];
int main()
{
int num,ti,tj,j,i,n,s,h,t,cntj,cnti;
scanf("%d",&t);
while(t--)
{
scanf("%d",&h);
n=h;
num=0;
ti=1;
tj=2;
cntj=0;
cnti=1;
s=(1+n)*n/2;
while(1)
{
for(i=ti;i<=n;i++)
{
m[i][cnti]=++num;
}
ti+=2;
cnti++;
for(j=tj;j<=n-cntj;j++)
{
m[n][j]=++num;
}
tj++;
cntj++;
for(i=n-1;i>=ti-1;i--)
{
m[i][i-cntj+1]=++num;
}
if(num==s)
break;
n--;
}
for(i=1;i<=h;i++)
{
for(j=1;j<=i-1;j++)
{
printf("%d ",m[i][j]);
}
printf("%d\n",m[i][i]);
}
}
return 0;
}