pta-打印沙漏,试了很多次总有一个测试点无法通过,求指点迷津

问题遇到的现象和发生背景

题目:
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印



*



所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *
结尾无空行
输出样例:



*



2

遇到的问题:在pta提交时,总是遇到一个测试点无法通过,但是代码在运行测试那块运行和在编译器上运行都是正确的

img

问题相关代码,请勿粘贴截图
#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); 
 } 
运行结果及报错内容

img

我的解答思路和尝试思路

通过等差数列前n项和、等差数列通项公式打印沙漏

我想要达到的结果

所有测试点都通过测试

img

如果没用掉的符号数为0 也应该输出0啊,题目没说为0就不用输出了吧。

#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--;
    }
    printf("%d",a-sum);
    return 0;
}


img