张宸睿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;
}