【暴力枚举】P1618 三连击(升级版)
难度:普及-
算法:暴力枚举
C++代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 55;
int a,b,c,n1,n2,n3;
int st[N];
bool flag;
int ans;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> a >> b >> c;
//暴力枚举 1 ~ 1000之内的所有的三位数
for(int num = 1; num <= 1000 / c; num ++){
n1 = num * a;
n2 = num * b;
n3 = num * c;
//判断是否满足条件
//1.统计每位数是否出现次数
for(int i = 1; i <= 3; i++){
st[n1 % 10] ++;
n1 /= 10;
}
for(int i = 1; i <= 3; i++){
st[n2 % 10] ++;
n2 /= 10;
}
for(int i = 1; i <= 3; i++){
st[n3 % 10] ++;
n3 /= 10;
}
//2.判断每一位数是否都出现过,当且仅当仅出现过1次
for(int i = 1; i <= 9; i++)
{
if(st[i] != 1) {
flag = true;
break;
}
}
if(!flag) {
cout << num * a << " " << num * b << " " << num * c << endl;
ans++;
}
//初始化
flag = false;
memset(st,0,sizeof st);
}
if(!ans) cout << "No!!!" << endl;
return 0;
}