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

洛谷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 23: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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月28日

悬赏问题

  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊