为什么一直是80 :((( 哪位大佬能帮忙看看问题出在那里,谢谢谢谢

P1618 三连击(升级版)

张宸睿103 @ 2023-07-21 12:07:03

代码如下

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int x,y,z;
    int a,b,c;
    int d=0;
    cin>>x>>y>>z;
    if(x<y&&y<z&&x<z)
    {
        for(a=100;a<=999;a++)
            {
                b=a/x*y;
                c=a/x*z;
                if((a/100)+(a/10%10)+(a%10)+(b/100)+(b/10%10)+(b%10)+(c/100)+(c/10%10)+(c%10)==45&&(a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*(b%10)*(c/100)*(c/10%10)*(c%10)==362880)
                {
                    cout<<a<<" "<<b<<" "<<c<<endl;
                    d=d+1;
                }
            }
            if(d==0)
            {
                cout<<"No!!!"<<endl;
            }
    }
    return 0;
}

跪求帮助


by xingcode @ 2023-07-21 12:39:57

@张宸睿103 特判0


by xingcode @ 2023-07-21 12:40:59

if((a/100)+(a/10%10)+(a%10)+(b/100)+(b/10%10)+(b%10)+(c/100)+(c/10%10)+(c%10)==45&&(a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*(b%10)*(c/100)*(c/10%10)*(c%10)==362880)

也不一定只有1~9时满足


by Zona @ 2023-07-21 12:45:16

@张宸睿103 你判断数字是否合法的思路有问题,按照你的代码,当输入是这样的时候

77 147 397

会输出

154 294 794

而这九个数字加起来的和也等于45,所以要一位一位判断,可以开个数组记录每个1-9每个数字是否都存在

下面是我的核心代码,仅供参考:

int s[10];//记录数字
void cnt(int m){
    s[m%10]++;
    s[m/10%10]++;
    s[m/100]++;
}
bool search(int x,int y,int z){
    memset(s,0,sizeof(s));
    if(y>987||z>987) return 0;
    cnt(x),cnt(y),cnt(z);
    for(int i=1;i<=9;i++){
        if(!s[i]) return 0;
    }
    return 1;
}

除此之外,Subtask#1中的测试点#1还有A=0的情况,此时除数为0就会RE,所以要特判一下,直接输出"No!!!"


by small_Dongpo @ 2023-07-24 20:44:21

这样判断:

int cf(int x)
{
    num[x % 10] = 1;
    num[x / 10 % 10] = 1;
    num[x / 100] = 1;
}

bool check(int x, int y, int z)
{
    memset(num, 0, sizeof(num));
    if (x > 987 || y > 987 || z > 987) return 0;
    cf(x), cf(y), cf(z);
    for (int i = 1; i <= 9; ++i)
    {
        if (num[i] == 0) return 0;
    }
    return 1;
}

|