求助,2,5过不了

P1618 三连击(升级版)

Alan_W @ 2021-12-05 11:11:08

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,o,f,sum;
int a[10],b[10],c[10];
int x,y,z;
void dfs(int s)
{
    if(s==10)
    {
        x=c[1]*100+c[2]*10+c[3];
        y=c[4]*100+c[5]*10+c[6]; 
        z=c[7]*100+c[8]*10+c[9]; 
        if(y/o==z/f&&x/n==y/o&&x/n==z/f)
        { 
            sum=1;
            cout<<x<<" "<<y<<" "<<z<<endl;
        }
        return ;
    }
    for(int i=1;i<=9;i++)
    {
        if(b[i]==0)
        {
            c[s]=i;
            b[i]=1;
            dfs(s+1);
            b[i]=0;
        }
    }
}
int main()
{
    cin>>n>>o>>f;
    dfs(1);
    if(sum!=1)  cout<<"No!!!";
    return 0;
}

by KAqwq @ 2021-12-05 12:08:09

那个 给你改了一下 过了

#include<bits/stdc++.h>
using namespace std;
int n,o,f,sum;
const int MAXN=1e6;
int a[10],c[10];
bool b[MAXN]; 
int x,y,z;
void dfs(int s)
{
    if(s==10)
    {
        x=c[1]*100+c[2]*10+c[3];
        y=c[4]*100+c[5]*10+c[6]; 
        z=c[7]*100+c[8]*10+c[9]; 
        if(y/o==z/f&&x/n==y/o&&x/n==z/f)
        { 
            sum=1;
            cout<<x<<" "<<y<<" "<<z<<endl;
        }
        return ;
    }
    for(int i=1;i<=9;i++)
    {
        if(!b[i])
        {
            c[s]=i;
            b[i]=1;
            dfs(s+1);
            b[i]=0;
        }
    }
}
int main()
{
    cin>>n>>o>>f;
    if(f%2==0){
        cout<<"No!!!";
        return 0;
    }
    if(n>100&&o>100&&f>100){
        cout<<n<<" "<<o<<" "<<f;
        return 0;
    }//如果它们都是三位数 则满足条件的只有它们本身 
    dfs(1);
    if(sum!=1) {
        cout<<"No!!!";
        return 0;
    }
    return 0;
}

by KAqwq @ 2021-12-05 12:20:28

教练讲的是注释的内容 但我觉得应改为:如果它们都是三位数 且个、十、百位的比为1:2:3那么满足条件的只有它们本身 @Alan_W


by Alan_W @ 2021-12-06 21:11:40

哦~感觉这很合理,懂了懂了


by nback @ 2021-12-07 15:04:08

//直接改成double也可以过的


#include<bits/stdc++.h>
using namespace std;
double n,o,f,sum;
int a[10],b[10],c[10];
double x,y,z;
void dfs(int s)
{
    if(s==10)
    {
        x=c[1]*100+c[2]*10+c[3];
        y=c[4]*100+c[5]*10+c[6]; 
        z=c[7]*100+c[8]*10+c[9]; 
        if(y/o==z/f&&x/n==y/o&&x/n==z/f)
        { 
            sum=1;
            cout<<x<<" "<<y<<" "<<z<<endl;
        }
        return ;
    }
    for(int i=1;i<=9;i++)
    {
        if(b[i]==0)
        {
            c[s]=i;
            b[i]=1;
            dfs(s+1);
            b[i]=0;
        }
    }
}
int main()
{
    cin>>n>>o>>f;
    dfs(1);
    if(sum!=1)  cout<<"No!!!";
    return 0;
}

by nback @ 2021-12-07 15:07:57

@皇族White 这个代码应该不对吧输入111 112 113应该输出No!!!啊不是吗


by KAqwq @ 2021-12-08 12:22:21

@nback 其实我搬的是自己代码中的一个特判 如果它们都是三位数 且个、十、百位的比为1:2:3那么满足条件的只有它们本身


by nback @ 2021-12-08 17:57:26

@皇族White ooooook!


|