C語言 codeup2506 問題 D: 沙漏圖形 tri2str [1*+] mw的解題思路與優化方案
阿新 • • 發佈:2021-01-04
文章目錄
題目
問題:輸入n,輸出正倒n層星號三角形。首行頂格,星號間有一空格,效果見樣例
輸入樣例:
3
輸出樣例
資料規模 1<= n <=50
大概就是這個樣子,具體看這→原題
解題思路
這道題其實就是在原有的對稱沙漏的基礎上右邊要輸出空格對齊。我原本想著是全部放在一個大迴圈裡面實現,可是到中間後面幾行時思考的太複雜。所以我選擇上面到中間分為一部分一起輸出,下面的分為另一部分進行輸出。
先講上面到中間的這一部分。我先考慮的是最中間只輸出一個 “ * ” 的這一部分,因為它的右邊是沒有空格的,左邊的空格規律是n-1個,最後再輸出一個 " * "。
下面的部分其實就是上面的部分倒過來輸出,具體可以看程式碼,這裡比較簡單不再贅述了。
總體程式碼
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
if(i==n-1){
for(int j=0;j<n-1;j++){
printf(" ");
}
printf ("*\n");
continue;
}
else {
for(int j=0;j<i;j++){
printf(" ");
}
for(int k=0;k<n-i;k++){
printf("*");
if(k<n-i-1) printf(" ");
}
if (i>0){
for(int l=0;l<i;l++){
printf(" ");
}
}
printf("\n");
}
}
for(int i=0;i<n-1;i++){
for(int j=0;j<n-2-i;j++){
printf(" ");
}
for(int k=0;k<2+i;k++){
printf("*");
if(k<2+i-1) printf(" ");
}
if(i<n-2){
for(int l=0;l<n-2-i;l++){
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
謝謝觀看!