方陣的主對角線之上稱為“上三角”。
請你設計一個用于填充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;
}