[C++] P1008 [NOIP 1998 普及组] 三连击

洛谷签到题(真·签到)

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

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

输入格式

输出格式

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

输入输出样例 #1

输入 #1

1

输出 #1

1
2
3
4
5
6
192 384 576
* * *
...

* * *
(剩余部分不予展示)

说明/提示

NOIP1998 普及组 第一题

题解

我的妈呀没啥好说的,递归就是了

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
#include <bits/stdc++.h>
using namespace std;

bool used[10] = {0};

void f(int a, int b, int c){
if(!(a/100)){
for(int i=1;i<10;i++)
if(!used[i]){
used[i] = true;
f(a*10+i, b, c);
used[i] = false;
}
}
else if(!(b/100)){
for(int i=1;i<10;i++)
if(!used[i]){
used[i] = true;
f(a, b*10+i, c);
used[i] = false;
}
}
else if(!(c/100)){
for(int i=1;i<10;i++)
if(!used[i]){
used[i] = true;
f(a, b, c*10+i);
used[i] = false;
}
}
else if(a*2==b && a*3==c) cout << a << " " << b << " " << c << endl;
}

int main(){
f(0, 0, 0);
return 0;
}