[NOIP1998 普及组] 三连击
题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1 , 2 , … , 9 1, 2, \ldots , 9 1,2,…,9 共 9 9 9 个数分成 3 3 3 组,分别组成 3 3 3 个三位数,且使这 3 3 3 个三位数构成 1 : 2 : 3 1 : 2 : 3 1:2:3 的比例,试求出所有满足条件的 3 3 3 个三位数。
输入格式
无
输出格式
若干行,每行 3 3 3 个数字。按照每行第 1 1 1 个数字升序排列。
样例 #1
样例输入 #1
无
样例输出 #1
192 384 576
* * *
...
* * *
(剩余部分不予展示)
思路
枚举所有可能的三位数,判断这三个数是否由1到9这9个数字组成,每个数字仅出现一次。
注意:这9个数字是1到9,不含0。
AC代码
#include <iostream>
#include <bitset>
#define AUTHOR "HEX9CF"
using namespace std;
bitset<10> bs;
void set(int x)
{
bs.set(x % 10);
bs.set((x % 100 - x % 10) / 10);
bs.set((x % 1000 - x % 100) / 100);
}
int main()
{
for (int i = 111; i < 1000 && i <= 1000 / 3; i++)
{
bs.reset();
int j = i * 2;
int k = i * 3;
set(i);
set(j);
set(k);
if (9 == bs.count() && 0 == bs[0])
{
cout << i << " " << j << " " << k << endl;
}
}
return 0;
}