作者PkmX (PkmX)
看板C_and_CPP
標題Re: [問題] 金字塔製作
時間Thu Aug 4 00:15:36 2011
※ 引述《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