题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1,2,…,9共 9 个数分成 3组,分别组成 3 个三位数,且使这 3 个三位数构成 1:2:3 的比例,试求出所有满足条件的 3 个三位数。
输入格式
无
输出格式
若干行,每行 3 个数字。按照每行第 1 个数字升序排列。
输入输出样例
输入 #1复制
无
输出 #1复制
192 384 576 * * * ... * * * (剩余部分不予展示)
题解:
1.由题意需要找到三个三位数 他们由1~9不重复组成 且 他们之间的比为 1:2:3,根据这个可以构造一个三元组(i,j,k),使 j = 2i , k = 3i,枚举三元组,并筛选满足条件的,统计次数
2.对于1~9不重复的数字组成三个三位数,可以考虑取出每一位并在一个bool类型的数组中进行标记。
代码如下:
#include<iostream>
using namespace std;
bool num[10] = { 0 };//保存是否出现过数字i num[i]为true则说明出现过
//判断i,j,k的每位是否有重复
bool judge(int i, int j, int k){
while (i)
{
int bit = i % 10;
if (num[bit]||bit == 0)//已经出现过这个数字或者数字为0,则说明不满足条件
return false;
else
num[bit] = true;
i /= 10;
}
while (j)
{
int bit = j % 10;
if (num[bit] || bit == 0)
return false;
else
num[bit] = true;
j /= 10;
}
while (k)
{
int bit = k % 10;
if (num[bit] || bit == 0)
return false;
else
num[bit] = true;
k /= 10;
}
return true;
}
int main(){
int i, j, k; //三元组(i,j,k)***
//满足 j = 2i , k = 3i
for (i = 123; i <= 987 / 3; i++){
//枚举三元组 与 三元组的范围确定
j = 2 * i;
k = 3 * i;
if (judge(i, j, k))
cout << i << " " << j << " " << k << endl;
for (int i = 1; i < 10; i++)//重置bool数组
num[i] = false;
}
return 0;
}