本題要求你寫個(gè)程序把給定的符號(hào)打印成沙漏的形狀。
所謂“沙漏形狀”苟翻,是指每行輸出奇數(shù)個(gè)符號(hào)的止;各行符號(hào)中心對(duì)齊檩坚;相鄰兩行符號(hào)數(shù)差2;符號(hào)數(shù)先從大到小順序遞減到1诅福,再?gòu)男〉酱箜樞蜻f增匾委;首尾符號(hào)數(shù)相等。
給定任意N個(gè)符號(hào)氓润,不一定能正好組成一個(gè)沙漏赂乐。要求打印出的沙漏能用掉盡可能多的符號(hào)。
輸入格式:
輸入在一行給出1個(gè)正整數(shù)N(<=1000)和一個(gè)符號(hào)咖气,中間以空格分隔挨措。
輸出格式:
首先打印出由給定符號(hào)組成的最大的沙漏形狀,最后在一行中輸出剩下沒(méi)用掉的符號(hào)數(shù)崩溪。
輸入樣例見PAT官網(wǎng)
馬高飛飛 馬飛飛
1.這題是一道找規(guī)律的題目浅役,對(duì)稱和層數(shù)是兩個(gè)關(guān)鍵點(diǎn)。
- 沙漏型右側(cè)的空格不必打出來(lái)伶唯,是自己大意了
#include <stdio.h>
#define ABS(X) ((X) >= 0 ? (X) : -(X))
int main()
{
char c;
int N, M,i,j;
scanf("%d %c", &N, &c);
for(M = 1; 2 * M * M - 1 <= N; M++) ; M--; /* determine the size of the sandglass */
/* draw the pyramid */
for( i = 0; i < 2 * M - 1; i ++){
for( j = 0; j < M - 1 - ABS(M - 1 - i); j++) putchar(' ');
for( j = 0; j < 2 * ABS(M - 1 - i) + 1; j++) putchar(c);
putchar('\n');
}
printf("%d", N - 2 * M * M + 1);
return 0;
}