7-1 打印沙漏 (20 分)
本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個「*」,要求按下列格式打印設計
給定任意N個符號,不必定能正好組成一個沙漏。要求打印出的沙漏能用掉儘量多的符號。調試
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。code
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。blog
輸入樣例:
19
輸出樣例:
****
***io
(1)實驗代碼變量
#include<stdio.h> int main() { int n,sum=1,i=1,j,k; char ch; scanf("%d %c",&n,&ch); while(sum<=n) //打印出上半部分的行數i { sum+=2*(2*(i+1)-1); if(sum<=n) i++; } for(j=0;j<i;j++) //打印上半部分,肯定打印行數 { for(k=0;k<j;k++) printf(" "); for(k=0;k<2*(i-j)-1;k++) { printf("%c",ch); } printf("\n"); } for(j=2;j<=i;j++) //下半部分同上半部分的原理肯定行數 { for(k=0;k<i-j;k++) printf(" "); for(k=0;k<2*j-1;k++) { printf("%c",ch); } printf("\n"); } printf("%d",n-(sum-2*(2*(i+1)-1))); //注意最後要直接輸出的沒有用到的符號,要減去上面while語句多累加了一次的符號個數 return 0; }
(2)設計思路
原理
第一步:定義變量(整型與字符型)程序
第二步:運用while語句打印出上半部分的行數,再用兩個for語句肯定上下兩部分的行數,for語句中再鑲嵌for語句肯定「*」與空格的個數方法
第三步:打印結果im
(3)本題調試過程碰到問題及解決辦法
問題1:一開始不清楚怎麼表示行數
問題2:忘記相鄰兩行符號數差2怎麼表示
解決方法:翻書看,本身慢慢思索,而後查資料,最後問了同窗
(4)運行結果截圖