一支彩色铅笔 2022-04-28 15:13 采纳率: 100%
浏览 80
已结题

洛谷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你们有什么更便捷的方法吗 可以给我代码(带注释的让我自己品)谢谢了
麻烦了 祝大家身体健康天天快乐。

展开全部

  • 写回答

3条回答 默认 最新

  • zeekliu 2022-04-28 15:47
    关注

    中间有一处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;
    }
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    一支彩色铅笔 2022-04-28 15:59

    嗯嗯了解 但是抛开这点不谈 这题应该怎么改 因为我一开始全用整形来操作 编译每次都没有满分 我思考的时候加了个0.5 那我这个到底问题出在哪

    回复
    一支彩色铅笔 2022-04-28 16:00

    求你好好看看 我是真的想知道 我改半天一直不能AC

    回复
    zeekliu 回复 一支彩色铅笔 2022-04-28 16:18

    因为当m和n超过1000时需要特判哦

    回复
    展开全部11条评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月6日
  • 已采纳回答 4月29日
  • 创建了问题 4月28日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部