标签:沙漏 int 打印 PTA sign char lay include
用研究法做的 分析每一行的标号与数量的关系(这里不在赘述 补充说明都在注释里面了)
```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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。