沙漏打印問題


本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印

*****
 ***
 *
 ***
***** 

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。

輸入格式:

輸入在一行給出1個正整數N(1000)和一個符號,中間以空格分隔。

輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 * 

輸出樣例:

*****
 ***
 *
 ***
*****
2

解答:
 1 //每一行打印符號之后直接回車,不用打印空格
 2 #include<stdio.h>
 3 int main(){
 4     int i,j,k,n,l=1,t;
 5     char c=' ';
 6     scanf("%d %c",&n,&c);
 7     while(l*l*2-1<=n){
 8         l++;
 9     }
10     l--;//得到打印上三角的行數
11     k=l;
12     for(i=1;i<=k;i++){//打印上三角
13         for(j=1;j<i;j++){
14             printf(" ");
15         }
16         for(j=1;j<=2*l-1;j++){
17             printf("%c",c);
18         }
19         l--;
20         printf("\n");
21     }
22     t=k;
23     l=2;//下三角從第二行開始打印
24     for(i=2;i<=k;i++){//打印下三角
25         for(j=1;j<=t-i;j++){
26             printf(" ");
27         }
28         for(j=2*l-1;j>0;j--){
29             printf("%c",c);
30         }
31         printf("\n");
32         l++;
33     }
34     printf("%d\n",n-(2*t*t-1));
35     return 0;
36 }
我的思路:題中每行輸出奇數個符號,相鄰兩行符號數差2,從上三角看起,可以看出每一行的符號個數是成等差數列

1.先通過輸入的符號個數得到上三角的行數

2.打印上三角:先打印空格,空格個數通過行號控制,再打印符號,符號的個數也通過行號控制,然后打印回車

3.下三角打印類似上三角,不過下三角的打印從第二行開始,下三角的第一行就是上三角的最后一行

4.得到剩余符號個數


不足錯誤的地方,歡迎拍磚!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM