int main()
{int sum,b,i,q,t,k,j,g,N
char c
sum=1b=1
scanf("%d %c",&N,&c)
for(i=1sum<=Ni++)
{ b=b+2//3+5+...
sum=sum+b*2}//当sum大于N时结束循环,所需要的sum应为sum-2*b
i=i-1
q=i//保存沙漏的下半部分有多少行
sum=sum-2*b//最大的沙漏所需要的字符数
k=0
for(j=ij>=1j--)//后面没什么好说的,就是正常的分成上下两部分,然后找行数和每行空格、字符数的关系
{ for(g=1g<=kg++)
printf(" ")
for(t=1t<=2*j-1t++)
printf("%c",c)
printf("\n")
k++
}
k=k-2
for(j=2j<=qj++)
{for(g=1g<=kg++)
printf(" ")
for(t=1t<=2*j-1t++)
printf("%c",c)
printf("\n")
k--}
printf("%d",N-sum)
return 0
}
用解析几何的做法比较好,就是那两条直线外的点为空白,直线内的区域为*即可,使用坐标法解。给你个框架,自己添加个头文件和return,你应该知道怎么做吧。
for(int i=0 i<9 i++)for(int j=0 j<9 j++)
if(j>i && (j-9<9-i))
printf("*")
else
printf(" ")
printf("\n")
#include<stdio.h>int main()
{
int i=0
int j=0
int n
printf("请输入行数:")
scanf("%d",&n)
for(i<ni++)
{
printf("* * * * * *\n")
}
printf(" * * * *\n")
printf(" * * \n")
printf(" * * * *\n")
for(j<nj++)
{
printf("* * * * * *\n")
}
return 0
}