P1618 40分求助!

P1618 三连击(升级版)

huyubo817 @ 2024-07-29 09:38:28

请问哪里有问题吗,只有40分

题目

#include<bits/stdc++.h>
using namespace std;

int main(){
    int x,y,z;
    cin>>x>>y>>z;
    int x,y;
    int a=123;
    int i=1;
    bool flag=false;
    while(i<1000){//x为9位相加,y为9位相乘 
        a=i*x;
        b=i*y;
        c=i*z;
        if(a>=100&&a<1000&&b>=100&&b<1000&&c>=100&&c<1000){
            x=a/100%10+a/10%10+a%10+b/100%10+b/10%10+b%10+c/100%10+c/10%10+c%10;
            y=(a/100%10)*(a/10%10)*(a%10)*(b/100%10)*(b/10%10)*(b%10)*(c/100%10)*(c/10%10)*(c%10); 
            if(x==45&&y==362880){
                cout<<a<<" "<<B*a<<" "<<C*a<<endl;
                flag=true;
            }
            i++;
        }
    }
    if(flag==false) cout<<"N0!!!";
    return 0;
}

by Kete @ 2024-07-29 11:28:05

区区AC代码,不足挂齿

咳咳~

言归正传 | 思路:首先main函数用for遍历,凡是满足函数的都将加1

什么?你问我函数怎么写?\ 请自行脑补

玩笑归玩笑\

```c++ #include<bits/stdc++.h> using namespace std; int a,b,c,cnt[10]; bool check(int x){ if(a==0)return false; if(x*b%a!=0)return false; int y=x*b/a; if(c*y%b!=0)return false; int z=c*y/b; if(c*y%b!=0)return false; if(y<100||y>999)return false; if(z<100||z>999)return false; memset(cnt,0,sizeof(cnt)); int x_=x,y_=y,z_=z; for(int i=0;i<3;i++){ cnt[x%10]++;x/=10; cnt[y%10]++;y/=10; cnt[z%10]++;z/=10; } for(int i=1;i<=9;i++)if(cnt[i]!=1)return false; cout<<x_<<" "<<y_<<" "<<z_<<endl; return true; } int main() { cin>>a>>b>>c; int o=0; for(int x=123;x<=987;x++)if(check(x))o++; if(o==0)cout<<"No!!!"; return 0; } ``` [$AC$提交记录防伪证明](https://www.luogu.com.cn/record/169208523) $$The + End$$

by huyubo817 @ 2024-07-29 17:57:36

大佬啊大佬就是不一样,说话都幽默点

谢谢啦


|