谢洛克和C中的野兽

时间:2016-06-14 11:18:35

标签: c puzzle

我在解决这个问题时遇到了问题https://www.hackerrank.com/challenges/sherlock-and-the-beast/并且能够解决15个中的14个测试用例。如果有人可以帮我解决这个问题,我会留下测试用例#14。 / p>

这是我的代码:

int main()
{
int t,i,j,val1=0,val2=0,a0,k,z,five=0,three=0,rem=0,div=0;
int a=5,b=3;

scanf("%d",&t);
for(int a0 = 0; a0 < t; a0++){
    int n; 
    scanf("%d",&n);
    rem=n%3;
    div=n/3;
    if(n>2)
    {
    if(n==4)
        {printf("-1\n");}
    if(rem==2){
        three=1;
        five=div-1;
    }
    else if(rem==1){
        three=2;
        five=div-3;
    }
    else if(rem==0)
    {
        three=0;
        five=div;
    }



    for(k=0;k<five;k++){printf("555");}
    for(z=0;z<three;z++){printf("33333");}

}
    else {printf("-1");}
    printf("\n");
}
 return 0;
}

测试用例: 10 1 2 3 4 五 6 7 8 9 10

预期产出:
-1 -1 555 -1 33333 555555 -1 55533333 555555555 3333333333

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上但需要进行更多的概括。不需要使用“n”,而是需要引入标志。

for(int a0 = 0; a0 < t; a0++)
{   FLAG=1;
    int n; 
    scanf("%d",&n);
    rem=n%3;
    div=n/3;
    if(rem==2)
        {
            if(div<1)
                FLAG=0;
            five=div-1;
            three=1;
        }
        else if(rem==1)
        {

            if(div<3)
                FLAG=0;
            five=div-3;
            three=2;
        }
        else if(rem==0)
        {
            three=0;
            five=div;
        }

    if(FLAG==1)
    {
            for(k=0;k<five;k++){printf("555");}
            for(z=0;z<three;z++){printf("33333");}
    }
    if(FLAG==0)
        {printf("-1");}
    printf("\n");
}
return 0;
}

希望这会有所帮助!