看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《shile775 (笑看人生)》之銘言: : 這次是金字塔製作, : 下面是題目: : ====================== : 金字塔形共幾列:3 : * : *** : ***** : ====================== : 然後這是我想的程式: : printf("金字塔形共幾列:"); : scanf("%d", &no); : for(i = 1; i <=no; i+=2){ : for (j = 1; j <= no-i; j+=2) : putchar(' '); : for (j = 1; j <= i; j++) : putchar('*'); : putchar('\n'); : } : 但是輸出的結果卻不一樣, : 以下是我跑的結果: : ===================== : 金字塔形共幾列:5 : * : *** : ***** : ===================== : 我不曉得為什麼會這樣,是因為我設輸入數字的關係嗎? : 麻煩板上大大幫我解答,謝謝大家!! : (附帶一個問題,為什麼題目輸入3就可以跑出三行,而我必須輸入5?) 這類問題大都是要找出數字的規律,看規律最簡單最笨的方法就是畫出來: 假設高度是3的話,金字塔會長這樣: * line 1: 2 whitespaces, 1 asterisk *** line 2: 1 whitespace, 3 asterisks ***** line 3: 0 whitespace, 5 asterisks 然後看高度是4的金字塔: * line 1: 3 whitespaces, 1 asterisk *** line 2: 2 whitespaces, 3 asterisks ***** line 3: 1 whitespace, 5 asterisks ******* line 4: 0 whitespace, 7 asterisks 規則很明顯:高度為n的金字塔,其空格為n-1..0個,而星號為1, 3, 5, ..., 2*n-1個, 第i行會有n-i個空格和2*i-1個星號,所以你只要用簡單的迴圈就可以把它寫完了: #include <stdio.h> int main(void) { int height; printf("Height: "); scanf("%d", &height); int i, j; // i-th line. for (i = 1; i <= height; ++i) { // Print (height - i) whitespace(s). for (j = 0; j < height - i; ++j) { putchar(' '); } // Print (2 * i - 1) asterisk(s). for (j = 0; j < 2 * i - 1; ++j) { putchar('*'); } putchar('\n'); } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.243.93
VictorTom:推推理過程:) 08/04 00:24
shadowjohn:用數學邏輯推理解答程式寫起來輕鬆又易懂~推 ! 08/04 00:35
ericinttu:有真相有推 08/04 00:41
xatier:大神學長推! 08/04 01:39