PAT乙級 1027 列印沙漏 20分

2021-10-06 02:59:15 字數 1660 閱讀 5001

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個「*」,要求按下列格式列印

*****

****

********

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

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

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

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

19 *

*****

****

********

2把沙漏分為上下兩部分分別列印,難度會大大降低。

至於這個沙漏的層數怎麼計算的,當然可以推導出乙個公式(等差數列和)。或者笨辦法也行,用迴圈累加來計算行數。

用公式推導的話,設n是一半沙漏的高度(向上取整,比如五層沙漏一半高為3),符號個數為2n2-1

用了迴圈判斷行數,沙漏上下部分分別用乙個for迴圈列印。

#include

using

namespace std;

int a,b,tmpa,ceng=2;

intmain()

ceng -=2

;for

(int i=

0;i1;i++

)for

(int i=ceng-

1;i>=

0;i--

)printf

("%d"

,a);

return0;

}

這個只是為了追求**行數少而十分倔強的乙份**,實際上並不好理解,難點在於數字關係,加加減減的。考試的時候我是不會寫這種東西的。

#include

using

namespace std;

int a,b,tmpb,ceng;

intmain()

printf

("%d"

,a -=2

*ceng*ceng-1)

;return0;

}

#include

#include

using

namespace std;

int a,b,tmpb,ceng;

intmain()

printf

("%d"

,a -=2

*ceng*ceng-1)

;return0;

}

夠短了吧

#include

using

namespace std;

intmain

(int a,

int b,

int tb,

int lv)

printf

("%d"

,a -=2

*lv*lv-1)

;return0;

}

PAT 乙級 1027 列印沙漏(20)

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

PAT乙級1027 列印沙漏 20

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

PAT 乙級 1027 列印沙漏

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