2331 - 组成三位数
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
Input
本题无输入。
Output
输出所有符合要求的三个三位数,每一组占一行,数字之间由一个空格分隔。
每组中的三个数字按照从小到大输出,各组之间按照每组的第一个数从小到大输出。
Examples
Input
Output
Hint
本题无输入。
本题结果是唯一的,所以不提供输出样例。
Solution C
#include<stdio.h> int ju(int a) { int flag[10]={0},i; int b=2*a,c=3*a; for(i=0;i<9;i++) { int d; if(i<3) d=a%10,a/=10; else if(i<6) d=b%10,b/=10; else d=c%10,c/=10; if(++flag[d]==2) return 0; } } int main() { int i; for(i=123;i<=987;i++) if(ju(i)) printf("%d %d %d\n",i,2*i,3*i); return 0; }
Solution C++
#include <iostream> #include<cstring> using namespace std; bool vis[10]; int num[3]; void solve(int n) { if(n==3&&num[0]*2==num[1]&&num[0]*3==num[2]) cout<<num[0]<<' '<<num[1]<<' '<<num[2]<<endl; for(int i=1;i<=9;i++) { if(!vis[i]) { vis[i]=true; for(int j=1;j<=9;j++) { if(!vis[j]) { vis[j]=true; for(int k=1;k<=9;k++) { if(!vis[k]) { vis[k]=true; num[n]=i*100+j*10+k; solve(n+1); vis[k]=false; } } vis[j]=false; } } vis[i]=false; } } } int main() { memset(vis,false,sizeof(vis)); solve(0); }
Hint
本题无输入。
本题结果是唯一的,所以不提供输出样例。