方阵之上三角

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

请你设计一个用于填充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,右对齐。

 

分析:主要是根据当前数是在第几圈中,其中nTurn是记录当前在第几圈里面。

源代码:

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main()
 5 {
 6     const int M = 22;
 7     int martix[M][M] = {0};
 8 
 9     int N;
10     scanf("%d", &N);
11 
12     int front = 1;              //当前要填充的数
13     int last = N * (N + 1) / 2; //输入N时,最后一个数的值
14 
15     int i, j, nTurn = 0;        //nTurn记录当前是在第几圈里面
16     
17     while(front <= last)
18     {
19         nTurn++;                //每次循环,圈数加1
20 
21         i = nTurn;
22         j = nTurn;
23         for(; j <= N - (nTurn - 1) * 2; j++) //填充每一圈的横排
24         {
25             martix[i][j] = front++;
26         }
27 
28         i = nTurn + 1; 
29         j = N - (nTurn - 1) * 2 - 1;
30         for(; i <= N - (nTurn - 1) * 2 && j>= nTurn; i++, j--)//填充每一圈斜对角线
31         {
32             martix[i][j] = front++;
33         }
34 
35         i = N - (nTurn - 1) * 2 - 1; 
36         j = nTurn;
37         for(; i >= nTurn + 1; i--)          //填充每一圈竖排
38         {
39             martix[i][j] = front++;
40         }
41     }
42 
43     for(i = 1; i <= N; i++)
44     {
45         for(j = 1; j <= N - i + 1; j++)
46         {
47             printf("%4d", martix[i][j]);
48         }
49         printf("\n");
50     }
51 
52     return 0;
53 }

 

 

原文地址:https://www.cnblogs.com/Dreamcaihao/p/3055510.html