题目描述

将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

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <set>
#include <cstring>
#include <stack>
#include <vector>
#include <queue>
#define Swap(a,b) a ^= b ^= a ^= b
#define cl(a,b) memset(a,b,sizeof(a))
using namespace std ;
typedef long long LL;
const int N = 100000001 ;
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
const int MAX = 20;
const int inf = 0xffffff;
const LL mod = 1e9+7 ;
// ----+-+------------------------
int vis[MAX];
int a[MAX] ;
int a1 ,b ,c ;
int cnt ;
void dfs(int v){

if(v == 10){

int p1 = a[1]*100+ a[2]*10 +a[3];
int p2 = a[4]*100+ a[5]*10 +a[6];
int p3 = a[7]*100+ a[8]*10 +a[9];

if( (p1*b == p2)&&(p1*c == p3) ||(p1 == a1 &&p2 ==b &&p3 ==c) )
{
cnt ++ ;
cout<<p1<<" "<<p2<<" "<<p3<<endl ;
}

// cout<<endl;
return ;
}
for(int i = 1 ; i<=9;i++){
if(!vis[i]){
vis[i] = 1 ;
a[i] = v;
dfs(v+1) ;
vis[i] = 0 ;
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);


cin >>a1>>b >>c ;

dfs(1);
if(cnt==0){
cout<<"No!!!"<<endl;
}

return 0;
}