原题如上,下面贴出代码
#include <stdio.h>
int main(){
int n,m=1,pre,i=1,j,k;
char c;
scanf("%d %c",&n,&c);
while(n>=m){//这里用pre标出应该打印多少个字符
//注意这里的循环条件是n>=m,否则会找不到准确的pre
pre=m;
j=i;
i=i+2;
m=m+2*i;
}
//打印沙漏很重要一点就是要先打印空格,再打印字符
for(k=j;k>=1;k=k-2){
for(m=(j-k)/2;m>0;m--){
printf(" ");
}
for(m=k;m>=1;m--){
printf("%c",c);
}
printf("\n");
}
for(k=3;k<=j;k=k+2){
for(m=(j-k)/2;m>0;m--){
printf(" ");
}
for(m=k;m>=1;m--){
printf("%c",c);
}
printf("\n");
}
printf("%d",n-pre);//输出剩余为打印字符个数
}