其他的答案演示瞭如何解決與時髦的數學問題。另一種方法是用軟件狀態機解決問題。該狀態機具有三種狀態變量
- 跳過 - 就行
- 增量所示的星號(分)的數量 - - 的空間在該行
- 節目的開頭的編號使用調整跳過並顯示每個循環中的循環
狀態變量的這種排列使printf更容易理解。 skip+show
是一行上的字符總數,show
是從stars
字符串中取出的星號數,而stars
字符串只需要比最大值show
長。
char *stars = "*********************";
printf("%*.*s\n", skip + show, show, stars);
所以問題是如何更新每次通過循環的狀態變量以及循環終止條件。
服用例子n=5
,值的skip
序列是
4 3 2 1 0 1 2 3 4
我們通過最初設置skip = n-1
和delta = -1
實現此目的。將delta
添加到skip
會導致skip
減少,直到達到0
。我們強制skip = 1
和delta = 1
改變方向,而不是讓skip
消極。然後skip
遞增,直到達到n
,終止循環。
值的show
序列是
1 3 5 7 9 7 5 3 1
通過與show=1
開始,和通過調整-2*delta
產生此序列。
char *stars = "*********************";
int n = 5;
int skip = n - 1;
int delta = -1;
int show = 1;
while (skip < n)
{
printf("%*.*s\n", skip + show, show, stars );
skip += delta;
if (skip < 0)
{
skip = 1;
delta = 1;
}
show -= delta * 2;
}
什麼是期望的輸出? – Rizier123 2015-02-05 19:36:45
我編輯了我的問題以添加圖像 – cheroky 2015-02-05 19:43:22
由於輸出需要9個連續的星號'*'且代碼只有5個,您註定要失敗。 – 2015-02-05 21:17:18