三连击(升级版)

题目描述

将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。

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

输入输出格式

输入格式:

三个数,A B C。

输出格式:

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

输入输出样例

输入样例#1:
1 2 3
输出样例#1:
192 384 576
219 438 657
273 546 819
327 654 981

说明

保证A<B<C

代码实现:

 1 #include<cstdio>
 2 int a,b,c;
 3 bool v[10],w[10],p;
 4 bool pd(int x){
 5     while(x){
 6         if(w[x%10]) return 1;
 7         w[x%10]=1;x/=10;
 8     }
 9 }
10 void find(int x){
11     if(x>100){
12         for(int i=1;i<10;i++) w[i]=0;
13         int y=x*b/a,z=x*c/a;
14         if(pd(x)||pd(y)||pd(z)) return;
15         printf("%d %d %d
",x,y,z);p=1;
16     }
17     for(int i=1;i<=9;i++) if(!v[i]){v[i]=1;find(x*10+i);v[i]=0;}
18 }
19 int main(){
20     scanf("%d%d%d",&a,&b,&c);
21     find(0);
22     if(!p) printf("No!!!
");
23     return 0;
24 }

一开始没注意到要输出”No!!!“,结果60,呵呵。

题目来源:洛谷

原文地址:https://www.cnblogs.com/J-william/p/6286113.html