现在的位置: 首页 > 综合 > 正文

螺旋打印三角数字矩阵

2014年01月28日 ⁄ 综合 ⁄ 共 966字 ⁄ 字号 评论关闭

(蓝桥杯)

 程序设计(满分15分)

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

请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用123….的自然数列,从左上角开始,按照顺时针方向螺旋填充。

例如:当n=3时,输出:

1 2 3

6 4

5

n=4时,输出:

1  2 3 4

9 10 5

8  6

7

n=5时,输出:

  1  2  3  4  5

 12 13 14  6 

 11 15  7

 10  8

  9

程序运行时,要求用户输入整数n3~20

程序输出:方阵的上三角部分。

要求格式:每个数据宽度为4,右对齐。

要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。 

对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API

#include <iostream>
using namespace std;

int main(){
	int abtra[22][22]={0};
	int n;
	scanf("%d",&n);
	int t=n;
	for(int i=1; i<=n; ++i){  
		for(int j=1; j<=t; ++j)
			abtra[i][j]=-1;
		--t;
		}
	int nn=0;
	for(int i=1;i<=n;++i)
		nn+=i;
	int k=1;
	int i=1,j=1;
	for(int t=1;t<=nn;++t){
		if(k==1){
			if(abtra[i][j]==-1)  
			   abtra[i][j++]=t;  
			else{  
			   k=2;++i;j-=2; //可以填入的位置都填满时需要改变方向  
				}  
         }
		if(k==2){
		 if(abtra[i][j]==-1)  
				abtra[i++][j--]=t;  
			else{  
				k=3;i-=2;++j; //可以填入的位置都填满时需要改变方向  
				}  
			} 
		if(k==3){
			if(abtra[i][j]==-1)
				abtra[i--][j]=t;
			else{
				k=1;++i;++j;--t;
				}
			}
		}
	for(int i=1; i <= n; ++i){  
		for(int j=1; j <= n;++j){
			if(abtra[i][j]==0)
				break;
            printf("%4d",abtra[i][j]); //按规格打印  
			}
        printf("\n");  
        }  
	}

抱歉!评论已关闭.