PAT (Basic Level) Practice (中文) 1027 列印沙漏
阿新 • • 發佈:2021-02-20
1027 列印沙漏
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
程式碼
#include<cstdio>
int main(){
int n,m=1,k,count,t;
char a;
scanf("%d %c",&n,&a);
for(int i=1;i<1000;i++){
k=m;
m+=2*(2*i+1);
count=i; //count為倒三角層數
if(m>=n) break;
}
if(m==n){
t=m;
count++;
}
else
t= k; //t為用掉符號數
int side=1+2*(count-1); //最頂端符號數
for(int i=0;i<count;i++){ //倒三角
for(int j=0;j<i;j++){
printf(" ");
}
for(int j=0;j<side-2*i;j++){
printf("%c",a);
}
printf("\n");
}
for(int i=0;i<count-1;i++){ //上三角
for(int j=0;j<count-i-2; j++){
printf(" ");
}
for(int j=0;j<2*i+3;j++){
printf("%c",a);
}
printf("\n");
}
printf("%d",n-t);
}