原题链接:http://www.dotcpp.com/oj/problem1097.html
从题目可以看出来输出就是在一条对角线上输出1,2,3...等等
由此可以发现规律,这条线上从一开始i(看做横坐标)都是大于j(看做纵坐标)的,
并且i!=1,最后递减到i=1,不过需要注意的是第一个数不是这样的,所以我在循环外就进行了赋值。
当i=1的时候,需要重新从j=1开始,所以此时,将i=j+1;j=1。
跳出循环的就是j递增到n的时候
#include <stdio.h>
int main()
{
int a[100][100];
int n;
while(~scanf("%d",&n))
{
int i=2,j=1,t=2;
a[1][1]=1;
while(1)
{
a[i][j]=t++;
if(j==n)
break;
if(i!=1)
{
i--;
j++;
}
else if(i==1&&j!=n)
{
i=j+1;
j=1;
}
}
int b=n;
for(i=1;i<=n;i++)
{
for(j=1;j<=b;j++)
{
if(j<b)
printf("%d ",a[i][j]);
else
printf("%d\n",a[i][j]);
}
b--;
}
}
return 0;
}