天天看點

第二屆藍橋杯C/C++組第八題 三角螺旋陣

方陣的主對角線之上稱為“上三角”。

請你設計一個用于填充n階方陣的上三角區域的程式。填充的規則是:使用1,2,3….的自然數列,從左上角開始,按照順時針方向螺旋填充。

例如:當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

程式運作時,要求使用者輸入整數n(3~20)

程式輸出:方陣的上三角部分。

要求格式:每個資料寬度為4,右對齊。

要求考生把所有函數寫在一個檔案中。調試好後,存入與考生檔案夾下對應題号的“解答.txt”中即可。相關的工程檔案不要拷入。

對于程式設計題目,要求選手給出的解答完全符合ANSI C标準,不能使用c++特性;不能使用諸如繪圖、中斷調用等硬體相關或作業系統相關的API。

三角螺旋陣的規律是順時針數字從1開始遞增的,是以我們也可以按照一圈一圈來将依次遞增的數賦給一個二維數組,然後輸出倒三角的數組即可。

#include<stdio.h>
int a[20][20];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int i,j,circle=1;//circle記錄進行到了第幾圈
        int pos=1;
        while(pos<=n*(n+1)/2)
        {
            for(i=circle,j=circle; j<=n-(circle-1)*2; j++)//橫向向右指派
                a[i][j]=pos++;
            for(i=circle+1,j=n-(circle-1)*2-1; i<=n-(circle-1)*2&&j>=circle; i++,j--)//對角線左下向指派
                a[i][j]=pos++;
            for(i=n-(circle-1)*2-1,j=circle; i>=circle+1; i--)//豎向向上指派
                a[i][j]=pos++;
            circle++;
        }
        for(i=1; i<=n; i++)//倒三角輸出
        {
            for(j=1; j<=n-i+1; j++)
                printf("%4d",a[i][j]);
            printf("\n");
        }
    }
    return 0;
}
           

繼續閱讀