最后一个测试点通过不了,但是100分

P1618 三连击(升级版)

yezhufenglv @ 2023-12-10 22:00:47

#include <stdio.h>

int sumnum(int num)
{
    return  ((num/100)+((num%100)/10)+(num%10));
}
int mulnum(int num)
{
    return ((num/100)*((num%100)/10)*(num%10));
}
int main()
{
    int num;
    int mulsum1;
    int A,B,C;                  //比例系数
    int begin,end;              //循环初始值和结束值
    scanf("%d %d %d",&A,&B,&C);
    begin = 123;
    end   = 1000*A/C;
    int flag = 0;
    float n1,n2;
    for(num=begin;num<end;num++)
    {

        n1 =  num*B/A; n2 = num*C/A;
        //判断是不是整数
        if(n1!=(int)n1||n2!=(int)n2)
        {
            continue;
        } 
        //判断是否满足要求                           
        if((sumnum(num)+sumnum((int)n1)+sumnum((int)n2)==45)&&(mulnum(num)*mulnum((int)n1)*mulnum((int)n2)==362880)) 
        {
            flag = 1;                                  //解标志位
            printf("%d %d %d\n",num,(int)n1,(int)n2);
        } 
    }
    if(flag == 0 )
    {
        printf("No!!!\n");
    }
    return 0;
}

7通过不了,但是分数是100昏,我不理解


by yezhufenglv @ 2023-12-10 22:03:21

@yezhufenglv 不是#7是#2通过不了


by Wangzj512 @ 2023-12-10 22:14:33

@yezhufenglv 若num,a,b,c均为整数,则num*a/b依然是整除,即使赋值给一个float也还是整数。

解决方法:num*a*1.0/b


by yezhufenglv @ 2023-12-11 15:40:30

@Wangzj512 感谢老哥,但是还是过不了,因为那个加和乘来判断是否满足要求的语句筛不掉那个特解 特解是 77 147 397


by Wangzj512 @ 2023-12-11 22:52:12

@yezhufenglv 数组会吧?开一个大小为10bool数组,每一次循环清空数组,然后把每一位数打个标记。如果这一种数字被打过标记或者最后有数字没有标记,那么就是不合法的一种。


by Wangzj512 @ 2023-12-11 23:01:10

可以写一个函数来实现这个功能


by yezhufenglv @ 2023-12-13 17:04:26

@Wangzj512 好嘞谢谢大佬


|