问题遇到的现象和发生背景
题目:
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
结尾无空行
输出样例:
*
2
遇到的问题:在pta提交时,总是遇到一个测试点无法通过,但是代码在运行测试那块运行和在编译器上运行都是正确的
。
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<math.h>
int main()
{ int a,n=1,k=0,bottle=0;
char ch;
int sum=-1,bn=1; //计前n项和、通项公式
int count=1; //统计空格数
scanf("%d %c",&a,&ch);
while(sum+2*(2*n-1)<=a){
sum+=2*(2*n-1);
n++;
k++;
}
int l;
l=k;
for(int z=1;bn>=1;z++)
{
bn=2*k-1;
for(int j=1;j<=bn;j++)
{
printf("%c",ch); }
if(bn!=1)
{
printf("\n");
for(int z=1;z<=count;z++)
{
printf(" ");} }
else
break;
count++;
k--;}
printf("\n");
k=l;
int f=2*k-1;
bottle=count-2;
for(int i=2;bn<f;i++)
{
bn=2*i-1;
if(bn!=f)
for(int k=1;k<=bottle;k++)
{
printf(" "); }
for(int j=1;j<=bn;j++)
{
printf("%c",ch);}
printf("\n");
bottle--;
}
if(a-sum==0)
return 0;
else
printf("%d",a-sum);
}
运行结果及报错内容
我的解答思路和尝试思路
通过等差数列前n项和、等差数列通项公式打印沙漏
我想要达到的结果
所有测试点都通过测试