1027 列印沙漏

2021-09-27 13:45:03 字數 930 閱讀 8227

分析:要求盡可能用掉多的符號,根據沙漏形狀,假設第一層需要用n個符號

只需滿足2 * (1+2+3+…+n) - 1 >= n就滿足用掉最多符號了

沙漏上半部:

第零行空格數為0,符號數為n;第一行空格數為1,符號數為n-2;…

所以第i行空格數為i,符號數為n-2*i;

沙漏下半部(除去重合部分):

第一行符號數為3,空格數為(n-3)/2;第二行符號數為5,空格數為(n-5)/2

第i行符號數為2*i+1,空格數為(n-符號數)/2;

思路:按照分析算出n和剩下的符號,再按照沙漏形狀列印符號

**如下

#include

using

namespace std;

intmain()

sum = sum - n; n = n -2;

//消除最後一層迴圈的影響

int layer =

(n+1)/

2;for(

int i =

0; i < layer; i++

)for

(int i =

1; i < layer; i++

) cout << n -

2*sum +1;

}

反思:

用for迴圈輸出的時候昏頭了,沒有意識到for只是用於計數

在輸出沙漏下半部時,用了不必要的時間去找空格規律

其實只需要記住 空格數*2+符號數 == n 就行了

wa了一次,忘了輸出剩餘符號數

1027 列印沙漏

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

1027 列印沙漏

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

1027 列印沙漏

題目在這裡 先計算餘數,把1先計入圖形總數中,每次每行都增加2,由於是上下兩行,加入總數時再乘以2,如果,總數大於n的時候,記下最多一行符號的個數及餘數,跳出。輸出圖案按照上下兩部分輸出即可。include using namespace std int main count 2 k for int...