题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成
1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
输入格式
无输入文件
输出格式
输出每行有三个数,为满足题设三位数。各行为满足要求的不同解。
样例输入
无
样例输出
无
思路
三位数最小的是123,最大是987,所以对第一个数设循环,从123到987/3,将元素乘2和3得到三个三位数,接着判断三个三位数是否由9个数组成,得到结果输出
判断时可以设个初始为0的数组,以三位数每一位作为下标对应的元素+1,最后判断下标1~9的元素是否全为1
#include<stdio.h>
int math[10] = { 0 };
void numOn(int num) {//检查使用的数字
int k;
while (num > 0) {//将数字对应下标的元素+1
k = num % 10;
math[k]++;
num /= 10;
}
}
int check(int num1, int num2, int num3) {//判断是否由1~9组成
numOn(num1);
numOn(num2);
numOn(num3);
int flag = 0;//是否符合条件
int i;
for (i = 1;i < 10;i++) {
if (math[i] != 1) {//有数字没使用或多次使用
flag = 1;//不符合条件
break;
}
}
for (i = 0;i < 10;i++) {//初次化
math[i] = 0;
}
return flag;
}
int main() {
int left = 123;
int right = 987 / 3;
int i,num2,num3;
for (i = left;i <= right;i++) {
num2 = i * 2;
num3 = i * 3;
if (!check(i, num2, num3)) {//符合条件
printf("%d %d %d\n", i, num2, num3);
}
}
return 0;
}