這個題實在沒想好咋寫 看題解 用的是什麼等差數列的思想 沒大看懂 最後在乙個看到乙個解 暴力求解 還是這個簡單直接 哈哈哈
這是別的題解的思想 先看沙漏的形狀,暫且以最中間的乙個*為界限分為上下兩部分。
上半部分:從中心開始向上每行增加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個符號,不一定能正好組成乙個沙漏。要求...