题目描述
将 1,2,…,91,2,…,9 共 99 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。
//感谢黄小U饮品完善题意
输入格式
三个数,A,B,CA,B,C。
输出格式
若干行,每行 33 个数字。按照每行第一个数字升序排列。
输入输出样例
输入 #1
1 2 3
输出 #1
192 384 576
219 438 657
273 546 819
327 654 981
说明/提示
保证 A<B<CA<B<C。
upd 2022.8.3upd 2022.8.3:新增加二组 Hack 数据。
题解
include<bits/stdc++.h>
using namespace std;
define ll long long
int A,B,C;
set
void solve(int a1,int a2,int a3){
int cA=100a1+10a2+a3;
int cB,cC;
if(cA%A!=0)
return;
cB=cA/AB;
cC=cA/AC;
if(cB>=1000||cC>=1000)
return;
int used[10];
for(int i=0;i<=9;i++)
used[i]=0;
used[a1]++;
used[a2]++;
used[a3]++;
while(cB){
used[cB%10]++;
cB/=10;
}
while(cC){
used[cC%10]++;
cC/=10;
}
for(int i=1;i<=9;i++){
if(used[i]!=1)
return;
}
ans.insert(cA);
}
int main(){
scanf("%d%d%d",&A,&B,&C);
if(A0){
puts("No!!!");
return 0;
}
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(ji)
continue;
for(int k=1;k<=9;k++){
if(kj||ki)
continue;
else{
solve(i,j,k);
}
}
}
}
if(ans.size())
for(auto i:ans){
printf("%d %d %d\n",i,i/AB,i/AC);
}
else{
printf("No!!!\n");
}
}