[NOIP1998 普及组] 三连击
题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1, 2, ··· , 9 共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1 : 2 : 3 的比例,试求出所有满足条件的 3 个三位数。
输入格式
无
输出格式
若干行,每行 3 个数字。按照每行第 1 个数字升序排列。
样例 1
样例输入 1
无
样例输出 1
192 384 576
暴力搜索。因为要求解的数字在1000以内,并且都是三位数,所以考虑对最小的数字从100- 333开始遍历。对于每一次遍历的三个数字,判断是否有重复数字。如果没有,就输出结果;否则,继续遍历。
代码实现:
#include<iostream>
using namespace std;
bool number[10];
int main()
{
for(int i=102;i<333;i++)
{
for(int m=1;m<=9;m++)
number[m]=0;
int temp=i;
int j=2*temp,k=3*temp;
int x1=temp%10;
temp/=10;
int x2=temp%10;
temp/=10;
int x3=temp%10;
temp/=10;
if(x1==x2||x1==x3||x2==x3)
continue;
number[x1]=true;
number[x2]=true;
number[x3]=true;
int x4=j%10;
j/=10;
if(number[x4])
continue;
else
number[x4]=true;
int x5=j%10;
j/=10;
if(number[x5])
continue;
else
number[x5]=true;
int x6=j%10;
j/=10;
if(number[x6])
continue;
else
number[x6]=true;
int x7=k%10;
k/=10;
if(number[x7])
continue;
else
number[x7]=true;
int x8=k%10;
k/=10;
if(number[x8])
continue;
else
number[x8]=true;
int x9=k%10;
k/=10;
if(number[x9])
continue;
else
number[x9]=true;
cout<<i<<" "<<2*i<<" "<<3*i<<endl;
}
return 0;
}