題目:
7-82 列印沙漏 (20分)
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個「*」,要求按下列格式列印
所謂「沙漏形狀」,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能多的符號。
輸入格式:
輸入在一行給出1個正整數n(≤1000)和乙個符號,中間以空格分隔。
輸出格式:
首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
2思路:觀察出沙漏從中間乙個往上下(1 3 5 7 …)走每一層間是等差數列關係則
第n層·數有2n-1; 沙漏總數可通過等差數列求和為:2nn-1;(這裡的n表示最高有n層)
因此初步需要求出下面的量
1.總層數: 可通過迴圈從n=1開始遞增(每次n++)求出滿足沙漏總數(2nn-1)<=n 的最大值n.
2.求出總層數下面就好操作了;根據公式求每一層 * 數並且輸出具體細節在下面**中可見
加油幹 量變引起質變哦
**:
#includeint main()
i--; //實際總層數
int sum1=2*i*i-1; //用了的總個數
int sum2=n-sum1;//剩下的個數
int sum3;//表示每一層的個數
int j; //用於層數變化計算每一層個數
int k; //用於輸出每一層*的個數
int m=0; //計算每一層應該有的空格數
int s;//用於輸出每一層空格總數
// 列印上半部分
for(j=i;j>=1;j--)
for(k=1;k<=sum3;k++)
printf("\n");
printf("\n");
}//列印下半部分 (下半部分其實就是把上半部分反過來輸出)
for(j=2;j<=i;j++)
for(k=1;k<=sum3;k++)
printf("\n");
printf("\n");
}printf("%d",sum2); //輸出剩下的個數
return 0;
}
PTA(一) 列印沙漏
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能...
PTA 乙級 1027 列印沙漏 C 實現
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能...
PTA 1027 列印沙漏 c語言 分析 思路
分析 這道題雖然只有20分,但其複雜程度不亞於25的題目。其中有個坑點就是只有左邊有空格,右邊不能列印空格,列印會有乙個測試點過不了。思路 首先利用數學等差數列前n項和確定要列印的行數,然後要知道每行的空格的規律 0,1,2,3 和每行列印的字元的規律 然後我把這個沙漏分成兩個部分來列印 我是先輸出...