#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int n,i,s1,s2=1,yushu,num,k=0,j,max;
char sym;
scanf("%d",&n);
getchar();
sym=getchar();
for(i=1;;i++)
{
s1=s2;
s2=2*(i+1)*(i+1)-1;
if(s1<=n&&n<s2)
{
yushu=n-s1;
break;
}
}
max=i;
while(i!=1)
{
num=2*i-1;
i--;
j=k;
if(k!=0)
printf("\n");
while(j!=0)
{
printf(" ");
j--;
}
while(num!=0)
{
printf("%c",sym);
num--;
}
k++;
}
j=k;
if(k!=0)
printf("\n");
while(j!=0)
{
printf(" ");
j--;
}
printf("%c",sym);
k--;
for(i=2;i<=max;i++)
{
num=2*i-1;
j=k;
printf("\n");
while(j!=0)
{
printf(" ");
j--;
}
while(num!=0)
{
printf("%c",sym);
num--;
}
k--;
}
if(yushu!=0)
printf("\n%d",yushu);
if(yushu==1)
printf("\n0");
return 0;
}
一开始中间两个测试样例错了,以为是正好打印沙漏,余数为零的时候不用在最后一行输出余数,或者是换行格式错误,结果是忘了设置s2=1,n=1,2,…,6时无限循环了,我的脑子呀,明明写的时候还想到的