#include<stdio.h>
int main(){
int max,min,n;
max=1;
scanf("%d",&n);
for(max=1;;){//用于判断能够打印多少层沙漏(只算上面一部分)
if(2*max*max <= n){
max++;
}else break;
}
max=max -1; //上半层沙漏数
min=n-(2*max*max-1);//最终剩余数
for(int i=max;i>=1;i--){//打印上半层沙漏
for(int j=1;j<=max-i;j++){
printf(" ");
}
for(int j=1;j<=(2*i-1);j++){
printf("*");
}
printf("\n");
}
for(int i=2;i<=max;i++){//打印下半层沙漏,由于第一层也就是上半层的最后一层已经存在,所以是i=2开始的
for(int j=1;j<=max-i;j++){
printf(" ");
}
for(int j=1;j<=(2*i);j++){
printf("*");
}
printf("\n");
}
printf("%d\n",min);//输出最终剩余数
return 0;
}
输出样式:
*****
***
*
***
*****
2