P1618 三连击(升级版)(洛谷题面

题目

题目描述:

1,2,,91, 2,\ldots, 999 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!

//感谢黄小U饮品完善题意

输入格式:

三个数,A,B,CA,B,C

输出格式:

若干行,每行 33 个数字。按照每行第一个数字升序排列。

数据范围与说明:

保证 0A<B<C9990 \le A<B<C \le 999


upd 2022.8.3\text{upd 2022.8.3}:新增加二组 Hack 数据。

输入输出样例 #1

输入:

1
1 2 3

输出:

1
2
3
4
192 384 576
219 438 657
273 546 819
327 654 981

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<bits/stdc++.h>
using namespace std;
int a,b,c,x[10];
bool used[10]={0},ans=false;
int func(int s){
int sum=0;
for(int i=3*s-2;i<=3*s;i++){
sum*=10;
sum+=x[i];
}
return sum;
}
void solve(int n){
if(n==10&&(func(1)*b==func(2)*a)&&(func(3)*a==func(1)*c)){
cout<<func(1)<<" "<<func(2)<<" "<<func(3)<<endl;
ans=true;
return ;
}
for(int i=1;i<=9;i++){
if(!used[i]){
x[n]=i;
used[i]=true;
solve(n+1);
used[i]=false;
}
}
return ;
}
int main(){
cin>>a>>b>>c;
solve(1);
if(!ans) cout<<"No!!!";
return 0;
}