Problem Description
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
Input
程序运行时,从标准输入获得整数n(3~20)
Output
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
要求格式:每个数据宽度为4,右对齐。
Sample Input
3 4 5
Sample Output
1 2 3 6 4 5 1 2 3 4 9 10 5 8 6 7 1 2 3 4 5 12 13 14 6 11 15 7 10 8 9
题解:题意很简单,就是像这个样例一样打印一个数字三角形,我是利用双重循环,外层控制大循环,内层设置三个循环,第一个循环控制从左往右,第二个循环控制从右上到左下,第三个循环控制从下往上,最后输出。
#include<stdio.h> #include<string.h> #include<ctype.h> int line[30][30]; int main () { int i,j,n,m,num; memset(line,0,sizeof(line)); while(~scanf("%d",&n)){ memset(line,0,sizeof(line)); for(i=0;i<30;i++) line[0][i]=line[i][0]=1; num=1; line[1][n+1]=1; for(i=1,j=0;num<=(n*n-n)/2+n;){ while(line[i][j+1]==0){ line[i][++j]=num++; } while(line[i+1][j-1]==0){ line[++i][--j]=num++; } while(line[i-1][j]==0){ line[--i][j]=num++; } } for(i=1;i<=n;i++){ for(j=1;j<=n+1-i;j++) printf("%4d",line[i][j]); printf(" "); } } return 0; }