PTA 打印沙漏
作者:互联网
用研究法做的 分析每一行的标号与数量的关系(这里不在赘述 补充说明都在注释里面了)
```c
#include <stdio.h>
#include <math.h>
#include <string.h>
#include<stdbool.h>
#include<stdlib.h>
#define N 5
int blank,digit,other,len;
int main()
{
int n;
char sign;
scanf("%d %c",&n,&sign);
int lay=0;
//2*lay*lay;应该为需要的符号数量 怎么可能为负数?
while(n>2*lay*lay-1)//n为18就会再加一层 实际上这是多余的
{
lay++;
}
if(n<2*lay*lay-1)
{
lay--;
}
//printf("%d\n",lay);
int superfluous=n-(2*lay*lay-1);//剩余数
//printf("%d",superfluous);
//开始打印
//确定总行数为 lay*2-1
/*
3*****
2#***
1##*
lay 行 因为lay为3 所以取1 到 3做标号
1##* 取消下一个三角形第一行就行了 即j从2开始
2#***
3*****
下面的lay-1行
*/
int i=0;
for(int j=lay;j>0;j--)
{
if(j<lay)//开始打印空格
{
for(int k=0;k<i;k++)
{
printf(" ");
}
}
for(int k=0;k<j*2-1;k++)
{
printf("%c",sign);
}
i++;
printf("\n");
}
for(int j=2;j<=lay;j++)
{
//if(j!=1) 上面则为j=1开始
//{
for(int k=0;k<lay-j;k++)
{
printf(" ");
}
for(int k=0;k<j*2-1;k++)
{
printf("%c",sign);
}
printf("\n");
//}
}
printf("%d",superfluous);
return 0;
}
标签:沙漏,int,打印,PTA,sign,char,lay,include 来源: https://blog.csdn.net/Liu2003abc/article/details/121438060