螺旋三角形

2021-09-29 06:35:25 字數 2248 閱讀 6024

方陣的主對角線之上稱為「上三角」。

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

例如:當n=3時,輸出:

1 2 3

6 45

當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,右對齊。

解題思路:

1、先由左向右列印第一行

2、再由右上向左下列印斜對角線位置的值

3、最後由下往上列印

4、重複1-3

5、所有的路線走法以遇到非0停止

實現方法步驟:我們以 n = 10為例

1、定義乙個二維數字,並設定乙個非零邊界

#define maxlen 22

#define nozero 1

int arr[22][22] = ;

int num = 1;

int value;

scanf_s("%d", &value, sizeof(value));

for (i = 0; i < maxlen; i++)

arr[num][value + 1] = nozero;

執行後的效果圖如下

2、第一次由左向右列印首行

int i = 1;

int j = 0;

while (!arr[i][j + 1])

執行後的效果圖如下

3、第一次由右上向左下斜對角線列印

while (!arr[i + 1][j - 1])
執行後的效果圖如下

4、第一次由下向上列印

while (!arr[i-1][j])
執行後的效果圖如下

5、加個迴圈操作,設定判斷退出條件最多填充數 num <= (n * n – n) / 2 + n

for (i = 1, j = 0; num <= (value * value - value) / 2 + value;) 

while (!arr[i + 1][j - 1])

while (!arr[i - 1][j])

}

執行後的效果圖如下

6、參考**

#include#include#define maxlen 22

#define nozero 1

int main()

; int num = 1;

int i;

int j;

int value;

while (~scanf_s("%d", &value, sizeof(value)))

arr[num][value + 1] = nozero;

for (i = 1, j = 0; num <= (value * value - value) / 2 + value;)

while (!arr[i + 1][j - 1])

while (!arr[i - 1][j])

}for (i = 1; i <= value; i++)

memset(arr, 0, sizeof(arr));

num = 1;

}return 0;

}

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...

三角形面積

算是自己第一道正式寫的演算法幾何吧,先從簡單的開始吧,加油!描述 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 輸入 每行是一組測試資料,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。座標值都在0到10000之間 輸入0 0 0 0 0 0表示輸入結束...