洛谷P1008三连击

1. 题目描述

将1,2, … ,9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。

2. Notes

  1. 不要怕浪费一些空间资源和运算资源,不必太苛责

  2. 两个条件判断(本题中为判断a,b,c是否同时满足a:b:c=1:2:3 和 a,b,c三个数每一位是否能凑齐1-9九个数
    可将其中一个条件判断直接转化为条件使用,缩小查找的范围(一般用简单的条件)比如该题直接令b=2a,c=3a;

  3. 判断9个数是否都不一样可以先设置9个数字,然后让得到的数字去“点亮”自己的位置(false->true)

2. 题解

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
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
using namespace std;
int main(){
int a,b,c,i,tmp;
bool f[10];
bool flag;
for(a = 123;a <= 329;a++){
flag = true;
for(i = 0; i < 10; i++){
f[i] = false;
}
b = 2*a;
c = 3*a;

//开始检验
tmp = a;
while(tmp){
f[tmp%10] = true;
tmp /= 10;
}

tmp = b;
while(tmp){
f[tmp%10] = true;
tmp /= 10;
}

tmp = c;
while(tmp){
f[tmp%10] = true;
tmp /= 10;
}

for(i = 1; i < 10; i++){
if(f[i]==false){
flag = false;
break;
}
}

if(flag){
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
return 0;
}