c语言:打印沙漏求大神讲解意思

Python042

c语言:打印沙漏求大神讲解意思,第1张

#include<stdio.h>

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

}