B1027 列印沙漏
阿新 • • 發佈:2019-01-11
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
#include<stdio.h> int p; int init(int n){ int sum=0,i; for(i=1;i<=n;i++){ if(i==1)sum=1; else sum+=(2*i-1)*2; if(sum>n)break; } p=sum-(2*i-1)*2; return i-1; } int main(){ int n,local=0; char str; scanf("%d",&n);getchar(); scanf("%c",&str); for(int i=init(n)-1;i>0;i--){//i=2,1; for(int k=0;k<init(n)-i-1;k++){ printf(" "); } local=init(n)-i; for(int j=0;j<1+2*i;j++){ printf("%c",str); } printf("\n"); } for(int i=0;i<local;i++){printf(" ");} if(n!=0) printf("%c\n",str); for(int i=1;i<=init(n)-1;i++){ for(int k=init(n)-i-2;k>=0;k--){ printf(" "); } for(int j=0;j<1+2*i;j++){ printf("%c",str); } printf("\n"); } if((n-p!=0)&&n!=1&&n!=0) printf("%d",n-p); else if(n==1)printf("0"); }
注意:可分三塊輸出 上一片 中間 下一片
在n==1的時候需要輸出最後的結果還有0個特判一下 否則有一個測試點過不了