本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
流程圖

實驗代碼
#include<stdio.h>
#include<math.h>
int main()
{
int i=1,m,n,x=1,y,z,h,l,a;
char c;
scanf("%d %c",&m,&c);
while(2x-1<=m)
{
i=i+2;
x=x+i;
}
i=2-i;
n=2-i;
while(i<fabs(n))
{
for(z=1;z<(fabs(n)-fabs(i))/2;z++)
{
printf(" ");
}
for(h=1;h<=fabs(i);h++)
{
printf("%c",c);
}
printf("\n");
if(i!=-1)
{
i=i+2;
}
else
{
i=i+4;
}
}
a=m-2(x-fabs(i))+1;
printf("%d",a);
return 0;
}
解法
首先定義變量,再利用 循環 篩選出 給定值里的所有奇數,再把所有奇數再次用循環 逐個打印出符號,最后輸出余數。注意這里需要用到 絕對值函數,因為輸出的符號成對稱的。
