pta乙级1027打印沙漏

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int n;
    char a;
    scanf("%d %c",&n,&a);
    int m=1;
    int count;
    int b=n-1;
    if(n==1){
        printf("*");
    }else if(n>1){
        int x=2*m*m+4*m;
        m++;
        while(b>=x){
            x=2*m*m+4*m;
            m++;
        }
        count=m-1;
        int i=0,j=0;
        int p=(count-1)*2+1;
        for(i=1;i<=p;i++){
            for(j=1;j<=p;j++){
                if(fabs(i-count)>=fabs(j-count)){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
            printf("\n");
        }
        
    }
    int y;
    int p=count-1;
    y=b-2*p*p-4*p;
    if(y!=0){
            printf("%d",y);
    }

    return 0;
 } 

请大家帮忙看看为啥我这个通过不了pta而且是一个也没通过;


#include<iostream>
#include<string>
using namespace std;

int main(){
    char ch;
    int n,sn=0,i=0;
    cin>>n>>ch;
    while(sn<=n){
        i++;
        sn=2*i*i+4*i+1;
    }
    i=i-1;
    sn=2*i*i+4*i+1;
    int length=3+(i-1)*2;
    int an;
    for(int j=i; j>0; j--){
        an=3+(j-1)*2;
        int in=(length-an)/2;
        string pr1(in,' ');
        string pr2(an,ch);
        cout<<pr1<<pr2<<'\n';
    }
    int k=(length-1)/2;
    string pr(k,' ');
    cout<<pr<<ch<<'\n'; 
    for(int j=1; j<=i; j++){
        an=3+(j-1)*2;
        int in=(length-an)/2;
        string pr1(in,' ');
        string pr2(an,ch);
        cout<<pr1<<pr2<<'\n';    
    }
    cout<<n-sn<<endl;
} 

兄弟们 棒棒
忙吧