本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定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.得到剩余符號個數
不足錯誤的地方,歡迎拍磚!