強迫症滿足向 字母金字塔 C語言實現

2021-09-01 18:38:03 字數 1379 閱讀 9392

這是乙個for迴圈小練習

為滿足強迫症需求, leo先放個圖爽一爽

演算法本身不難, 注意迴圈結束條件, 初值的設定, 利用等差公式等等

1.菱形行數一定為奇數

2.分上下2部分

3.上三角比下三角多一層 (行)

4.上半部分, 包含對稱行, (n+1)/2行  【n為總行數】

5.下半部分, 不包括對稱行, n/2 行

6.上半部分 

第 i 行空格數: (n+1)/2 - i 

第 i 行 " * " 數: j = 2 i - 1

7.下半部分【i 重新從1計數】

第 i 行空格數: i

第 i 行 " * " 數: j = n - 2 i【解釋在下面】

8. 雖然下三角是倒著的, 但也滿足等差數列, 公差為-2

問題是首項為幾? 

首項的 "*" 數其實等於對稱行前一行的 "*" 數目, 

上半部的星號個數滿足: 

j = 2i -1

對稱行前一行的 i 值為

i = (n+1)/2 - 1

代入得j = n - 2

所以n - 2就是下面等差數列的首項

下三角不包含對稱行, 那麼行數從1~i

下三角第 i 行的 " * " 數:

an = a1 + (n-1) d 

= (n-2) + (i-1)*(-2) 

= n - 2 i

好了,經過了精密的計算(bb),終於可以coding了 

#include int main()

for(j=0; j<2*i-1; j++) // 列印**

printf("\n");

} /*

下半部分, 不包括對稱行, n/2 行

*/ for(i=1; i<=n/2; i++) // 【注意】i 行號還是從1開始

printf("請輸入乙個大寫字母作為金字塔最大的英文本母: \n");

scanf("%c", &maxletr);

getchar(); // 吸收回車

// 排除非法輸入

while(maxletr'z')

for(i=0; i<26; i++) // 用以確定行數n }

printf("根據您的輸入,生成字母金字塔\n");

for(i=1; i<=n; i++) // 外層控制行數

字母金字塔(類同數字金字塔)

問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...

PTA 7 123 空心字母金字塔 10分

輸入乙個大寫的英文本母,輸出空心的字母金字塔。輸入格式 乙個大寫英文本母。輸出格式 乙個空心的大寫英文本母金字塔,其中第1層的 a 在第1行的第40列,列從1開始計數。輸入樣例 e輸出樣例 a b bc c d d eeeeeeeee include int main printf a n 先輸出3...

python3 題解(12)字母金字塔

問題 在控制台上列印輸出乙個字母組成的金字塔。比如7層的塔如下 這問題應該有很多可行的解法。下面的解法強調的是 小函式風格。把每個函式做得足夠小,功能足夠單一。這樣出現的錯誤好發現,將來好維護。更重要的是,小函式的組合會爆發出極強的靈活性。已知當前行比如aba,求下一行abcba defne x t...