洛谷P1618 三连击 平台编译没有满分通过

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#include<bits/stdc++.h>
using namespace std;
#define for(i,a,n) for(int i=a;i<n;i++)

int main()
{
int a,b,c;
cin>>a>>b>>c;
int no_exist=1;//范围内是否存在这样的成比例三位数
for(i,123,988)
{
int m=1.0ib/a+0.5;//加0.5是保证不会出错
int n=1.0ic/a+0.5;
if(m>=988||n>988)
continue;
int arr[10]={0};
arr[i/100]=1;
arr[(i%100)/10]=1;
arr[(i%10)]=1;

    arr[m/100]=1;
    arr[(m%100)/10]=1;
    arr[(m%10)]=1;
    
    
    arr[n/100]=1;
    arr[(n%100)/10]=1;
    arr[(n%10)]=1;
    
    int index=0;
    for(j,1,10)
    {
        if(arr[j]==1)
        index++;
}
    if(index==9){
    
    cout<<i<<" "<<m<<" "<<n<<endl;
    no_exist=0;
    }
}

if(no_exist)
cout<<"NO!!!"<<endl;

return 0;

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

麻烦了 麻烦给我细细讲讲我这个做法哪里有问题 为什么不能满分通过
然后我想知道 double 和int 之间转换有什么需要注意的点
以及this question你们有什么更便捷的方法吗 可以给我代码(带注释的让我自己品)谢谢了
麻烦了 祝大家身体健康天天快乐。

中间有一处int类型的数+0.5会自动舍掉小数点,也就相当于没有加
给个代码(有注释):
😀有用请采纳~~~

//LG1618 22-04-28
#include <bits/stdc++.h>
using namespace std;

bool FindSame(int aa,int bb,int cc)//检查重复
{
    int t[10];
    memset(t,0,sizeof(t));//初始化0
    while (aa>0)
    {
        t[aa%10]++;aa/=10;
    }
    while (bb>0)
    {
        t[bb%10]++;bb/=10;
    }
    while (cc>0)
    {
        t[cc%10]++;cc/=10;
    }
    for (int i=1;i<=9;i++) if (t[i]!=1) return 0;//不等于1就说明重复或没有
    return 1;
}

int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int x,y,z;//对应a,b,c
    cin>>x>>y>>z;
    if ((x+y+z)%3!=0)
    {
        //如果x,y,z加起来都不是3的倍数,说明x,y,z不可能是整数
        //因为这三个数的和必然是3的倍数
        cout<<"No!!!"<<endl;exit(0);//直接退出
    }
    bool f=0;//记录是否输出
    for (int i=123;i<=987;i++)//枚举
    {
        int a=i,b,c;
        if (a%x==0) //算另外两数
        {
            b=a/x*y;
            if (b%y==0) c=b/y*z;
            if (b>999 || c>999) continue;
            if (FindSame(a,b,c)) 
            {
                cout<<a<<" "<<b<<" "<<c<<endl;f=1;
            }
        }
    }
    if (!f) cout<<"No!!!"<<endl;
    return 0;
}

参考下这个

暴力枚举——三连击(洛谷 P1618)_是一只派大鑫的博客-CSDN博客_洛谷三连击 分析:按照套路,先找可枚举的元素:3个3位数可以9重for来枚举,但很显然会超时,所以我们需要去掉一些枚举的数,因为事先给定了比例,所以我们可以枚举第一3位数来确定另外两个,但是另外两个是不一定存在的,而一个数枚举的范围即是123—987,最后我们检验一下结果是否同时存在9个不同的数即可。这里判断,我们可以用一个数组 例如ans[10]来保存已经用了的位数,得到一个结果我们就将它的个位数、十位数、百位数分别求出来,放到ans中,最后看ans里的1-9的位置是不是有0,有0则不满足。 https://blog.csdn.net/weixin_44572229/article/details/119853364

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632