abc:def:ghi=1:2:3 排列(permutation)
2018-03-14 00:27
531 查看
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:
ghi=1:2:3。输出所有解。
分析:用穷举法,不过要优化一下,三个三位数是abc, def, ghi,比率是1:2:3,那么显然d>=(2*a)并且g>=3*a。所以,1<=a<=3,d>=2a,g>=3a;
第一种方法:通过判断1~9的和为45,相乘等于362880来输出
int main(){
for(int i = 102;i<333;i++){
int a[3];
a[0] = i;
a[1] = 2*i;
a[2] = 3*i;
int hole[10];
for(int j = 0;j<10;j++)
hole[j]=0;
int flag = 1;
for(int index = 0;index<3 && flag==1 ;index++){
if(hole[a[index]%10]==0)
hole[a[index]%10]=1;//随便一个数字都行
else
flag=0;
if(hole[a[index]/10 %10]==0)
hole[a[index]/10 %10]=1;
else
flag=0;
if(hole[a[index]/100]==0)
hole[a[index]/100]=1;
else
flag=0;
}
if(flag==1)
printf("%d %d %d\n",i,2*i,3*i);
}
return 0;
}
ghi=1:2:3。输出所有解。
分析:用穷举法,不过要优化一下,三个三位数是abc, def, ghi,比率是1:2:3,那么显然d>=(2*a)并且g>=3*a。所以,1<=a<=3,d>=2a,g>=3a;
第一种方法:通过判断1~9的和为45,相乘等于362880来输出
#include <stdio.h> void result(int num, int &result_add, int &result_mul) { int i, j, k; i = num / 100; //百位 j = num / 10 % 10; //十位 k = num % 10; //个位 result_add += i + j + k; //分解出来的位数相加 result_mul *= i * j * k; //相乘 } int main() { int i, j, k; int result_add, result_mul; for(i = 123; i <=329; i++) { j = i * 2; k = i * 3; result_add = 0; result_mul = 1; result(i, result_add, result_mul); result(j, result_add, result_mul); result(k, result_add, result_mul); if(result_add == 45 && result_mul == 362880)//判断 printf("%d %d %d\n", i, j, k); } return 0; }第二种方法:通过hole[0~10]中的数字都为0来判断#include<stdio.h>
int main(){
for(int i = 102;i<333;i++){
int a[3];
a[0] = i;
a[1] = 2*i;
a[2] = 3*i;
int hole[10];
for(int j = 0;j<10;j++)
hole[j]=0;
int flag = 1;
for(int index = 0;index<3 && flag==1 ;index++){
if(hole[a[index]%10]==0)
hole[a[index]%10]=1;//随便一个数字都行
else
flag=0;
if(hole[a[index]/10 %10]==0)
hole[a[index]/10 %10]=1;
else
flag=0;
if(hole[a[index]/100]==0)
hole[a[index]/100]=1;
else
flag=0;
}
if(flag==1)
printf("%d %d %d\n",i,2*i,3*i);
}
return 0;
}
相关文章推荐
- 排列(permutation):用1,2,3,...,9组成3个三位数abc, def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。提示:不必太动脑筋。
- 排列(permutation)--abc:def:ghi=1:2:3
- (最简单的)用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
- 用1,2....9组成三个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3,输出所有解
- 用1-9组成三个三位数abc,def,ghi,每个数字只能使用一次,并且要求abc:def:ghi=1:2:3
- 算法竞赛入门经典2-10 用1,2,3,4,5,6,7,8,9组成3个三位数 abc:def:ghi=1:2:3
- 用1,2,3,...9组成3个三位数abc,def,ghi,每个数字恰用一次,要求abc:def:ghi=1:2:3
- 用1,2,3...9组成3个三位数abc, def, ghi, 每个数字恰好使用一次,且abc:def:ghi=1:2:3,输出所有解。
- 用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解
- 用1,2,3…9组成3个三位数abc, def, ghi, 每个数字恰好使用一次,且abc:def:ghi=1:2:3,输出所有解。 用1,2,3…9组成3个三位数abc, def, ghi, 每个数
- 手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 #
- 1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
- 【算法竞赛题解】:abc:def:ghi = 1:2:3,有新巧妙解法支付宝转5块
- 1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解的两种解法
- next_permutation解决排列问题的利器
- STL next_permutation 全排列
- 算法竞赛入门经典 习题2-10 排列(permutation)
- poj 1833 排列 库函数 next_permutation 的调用
- poj-1833-排列 stl next_permutation(a,a+n)
- Java练习:排列(Permutation)问题