稍微尝试了一下
主要思想:由于17组成5 3 1 3 5的沙漏,人为的添加1,使其成为上下对称,为5 3 1 1 3 5,对折成5 3 1,则知是1 3 5这样的等差数列,类似的,31组成 7 5 3 1 3 5 7也就为 7 5 3 1。
#include<stdio.h>
#include<math.h>
main(){
int getnumber1,getnumber,couter,i,j,k,x;
char flat;
scanf("%d %c",&getnumber1,&flat);
getnumber=(getnumber1+1)/2;
couter=sqrt(getnumber);
for(i=1;i<=couter*2-1;i++){
for(j=(2*couter-1-(2*abs(i-couter)+1))/2;j>0;j--){
printf(" ");
}
for(k=2*abs(i-couter)+1;k>0;k--){ //实际的当前层数减去预算拥有的层数取绝对值,能够eg:31的沙漏,k=7,5,3,1,3,5,7
printf("%c",flat);
}
for(j=(2*couter-1-(2*abs(i-couter)+1))/2;j>0;j--){
printf(" ");
}
printf("\n");
}
if(getnumber!=0){
x=getnumber1+1-(2*couter*couter);
printf("%d",x);
}else printf("0");
}