分析:要求盡可能用掉多的符號,根據沙漏形狀,假設第一層需要用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...