這是乙個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...