PTA7 82 列印沙漏 C語言)(講解詳細)

2021-10-17 11:25:07 字數 1223 閱讀 9150

題目:

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 和每行列印的字元的規律 然後我把這個沙漏分成兩個部分來列印 我是先輸出...