P1618 三连击(升级版)(洛谷题面)
题目
题目描述:
将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。
//感谢黄小U饮品完善题意
输入格式:
三个数,A,B,C。
输出格式:
若干行,每行 3 个数字。按照每行第一个数字升序排列。
数据范围与说明:
保证 0≤A<B<C≤999。
upd 2022.8.3:新增加二组 Hack 数据。
输入输出样例 #1
输入:
输出:
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; }
|