3712 - 填充上三角

方阵的主对角线之上称为“上三角”。

请你设计一个用于填充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;
}

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题