我要寫一個程式,輸入一個奇數,會列印出像下面的圖案 (以輸入11為例,o代表空白)
ooooo*ooooo
oooo***oooo
ooo*****ooo
oo*******oo
o*********o
***********
而以下是程式碼:
#include<stdio.h>
#include<stdlib.h>
int main( ){
int n, i, j,spnum;
printf("請輸入一個奇數: "),
scanf("%d",&n);
for(i = 1 ; i <= n ; i += 2)
{
spnum = (n-i)/2;
for( j = 0 ; j < n-spnum ; j++)<br>{
if (j < spnum)<br>printf(" ");
else
printf("*");
}
printf("\n");
}
system("PAUSE");
return 0;
}
看過之後大約了解設計的邏輯,但是我對這一類畫圖的程式很沒轍,我想詢問程式設計的前輩,像這一類的問題,應該如何切入比較好分析設計的邏輯?
我在高中時期的VB競賽也是碰到這一題
當時的我是寫不出來的
(雖然當時是被班上硬推出來的替死鬼)
到了大學是沒有實際做過
不過我曾經有在腦中演練一遍
我當時的想法是
將這個三角形拆成兩半
ooooo*ooooo
oooo***oooo
ooo*****ooo
oo*******oo
o*********o
***********
像是這樣子的兩半
這樣子就好處理了
因為藍色那一半的最上面一行只有一個星號其他都是空白
而空白的數量剛好是數值-1的一半
而且只要每行遞減就能完成藍色那一半的輸出
接下來紅色那一半更簡單
同樣使用藍色那半部的方法
但是在第一行是沒有星號的
所以要改用另一個迴圈去表達
不過就在如何將兩半部的輸出結合在一起
就無法解決,就這樣子無疾而終
這是我對於這題的解析
雖然沒有結果
但是也簡化一些過程
給你參考
輸入>5的正整數n,輸出以下圖型:
**********
**ooooooo*
*o*oooooo*
*oo*ooooo*
*ooo*oooo*
*oooo*ooo*
*ooooo*oo*
*oooooo*o*
*ooooooo**
**********
都很頭痛,不知道要怎麼突破這種畫圖的問題 ..
內文搜尋

X