PAT L1 002 列印沙漏

2021-09-12 10:36:32 字數 1347 閱讀 6748

這個題實在沒想好咋寫 看題解 用的是什麼等差數列的思想 沒大看懂 最後在乙個看到乙個解 暴力求解 還是這個簡單直接 哈哈哈

這是別的題解的思想 先看沙漏的形狀,暫且以最中間的乙個*為界限分為上下兩部分。

上半部分:從中心開始向上每行增加2個

下半部分:從中心開始向下每行增加2個

利用等差數列可知,每增加一行,需要增加2*i-1個字元

我們首先需要確定一共有多少行,由於上下是對稱的,所以上半部分增加一行,下半部分就需要增加一行。所以每增加兩行就需要增加2*(2i-1)。所以具體步驟讓i=0;sum=0;代表行數和一共需要的個數。第一次先增加1,代表先算上中心的那乙個字元,然後迴圈每次sum增加2(2*i-1),i增加1,直到再增加一次會大於n為止。

這時i代表上半部分(或下半部分)的行數,sum代表一共需要的字元。

此時上半部分第j行為2*(i-j-1)-1個*、j-1個空格

下半部分第j行為2j-1個、i-j個空格

剩餘部分為sum-n。

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

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

輸入格式:

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

輸出格式:

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

輸入樣例:

19 *

輸出樣例:

*****

**** ***

*****

2

分析:給乙個數n和乙個符號c,用掉盡可能多的符號,列印沙漏和剩符號餘數量

-》求幾行

1+2*(3+5+7+9+……) 暴力

#include #include using namespace std;

int main()

else if(sum > n / 2)

}if(x == -1)

for(int i = con; i >= 1; i--)

for(int k = 2 * i + 1; k >= 1; k--)

printf("\n");

}for(int i = 1; i <= con + 1; i++)

for(int k = 2 * i - 1; k >= 1; k--)

printf("\n");

}cout << mod << endl;

getchar();

}return 0;

}

PAT L1 002 列印沙漏

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能...

PAT L1 002 列印沙漏 打表

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序...

L1 002 列印沙漏

l1 002.列印沙漏 本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求...