3712 - 填充上三角
时间限制 : 1 秒
内存限制 : 128 MB
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。
填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。<br />
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
题目输入
题目输出
输入/输出样例
输入格式
5
输出格式
1 2 3 4 5 12 13 14 6 11 15 7 10 8 9
C语言解答
#include<stdio.h> int M[20][20]; int idx=1; void tri(int r,int c,int n) { int i; if(n<=0)return; for(i=0;i<n;i++) M[r][c+i]=idx++; for(i=1;i<n;i++) M[r+i][c+n-1-i]=idx++; for(i=2;i<n;i++) M[r+n-i][c]=idx++; tri(r+1,c+1,n-3); } int main() { int n,i,j; scanf("%d",&n); tri(0,0,n); for(i=0;i<n;i++) { for(j=0;j<n-i;j++) { printf("%4d",M[i][j]); } printf("\n"); } return 0; }
C++解答
#include <iostream> #include <iomanip> using namespace std; int M[20][20]; int idx=1; void tri(int r,int c,int n)//从坐标(r,c)的元素开始三角填数,三角形上边长为n { int i; if(n<=0) return; for(i=0;i<n;i++)//填充三角形上边长 M[r][c+i]=idx++; for(i=1;i<n;i++)//填充三角形斜边长 M[r+i][c+n-1-i]=idx++; for(i=2;i<n;i++)//填充三角形左边长 M[r+n-i][c]=idx++; tri(r+1,c+1,n-3);//递归 } int main() { int n,i,j; cin>>n; tri(0,0,n); for(i=0;i<n;i++) { for(j=0;j<n-i;j++) cout<<setw(4)<<M[i][j]; cout<<endl; } return 0; }