这道题是挺简单的,但是自己还是犯了错误。丧
注:在最后求和的时候千万不要用n-sum,否则就会出现错误。
代码中的sum只是为了求出漏斗的层数。如果用n-sum有可能是对的,
但是有时候会多算一次循环,这样结果就会出现错误。
#include<stdio.h>
int main()
{
int n;
char c;
scanf("%d %c",&n,&c);
int sum=1;//沙漏需要的字符个数
int i=1;//层数
while(sum<n)
{
sum+=2*(2*(i+1)-1);//利用这个求出层数
if(sum<=n)
i++;
}
int j,k;
for(j=0;j<i;j++)//控制层数
{
for(k=0;k<j;k++)//控制字符对齐,即输出空格
printf(" ");
for(k=0;k<2*(i-j)-1;k++)//控制没行需要输出多少字符
{
printf("%c",c);
}
printf("\n");
}
for(j=2;j<=i;j++)
{
for(k=0;k<i-j;k++)//控制字符对齐,即输出空格
{
printf(" ");
}
for(k=0;k<2*j-1;k++)//控制下面漏斗的字符输出
printf("%c",c);
printf("\n");
}
printf("%d\n",n+1-2*i*i);//利用等差数列求和公式
return 0;
}
L1-002 打印沙漏
最新推荐文章于 2024-09-08 20:29:34 发布