题目描述
把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输出每组的三个三位数。
1149和1148的逻辑很像,这里就不多做描述
#include <stdio.h>
#include <math.h>
int fe(int i, int sq[10]);
void fed(int i, int sq[10]);
int main()
{
int arr[1000];
int sq[10] = {0};
int count = 0;
for (int i = 123; i <= 987; i++)
{
int a = i / 100;
int b = i % 10;
int c = (i / 10) % 10;
if (a == b || b == c || a == c || b == 0 || c == 0)
{
continue;
}
arr[count] = i;
count++;
}
for (int i = 1; i < count; i++)
{
for (int j = i + 1; j < count; j++)
{
for (int k = j + 1; k < count; k++)
{
if (fe(arr[i], sq) && fe(arr[j], sq) && fe(arr[k], sq))
{
if (arr[i] * 2 == arr[j] && arr[i] * 3 == arr[k])
{
printf("%d %d %d\n", arr[i], arr[j], arr[k]);
}
}
fed(arr[i], sq);
fed(arr[j], sq);
fed(arr[k], sq);
}
}
}
}
int fe(int i, int sq[10])
{
sq[i / 100]++;
sq[i % 10]++;
int a = i / 10;
sq[a % 10]++;
if (sq[i / 100] == 1 && sq[i % 10] == 1 && sq[a % 10] == 1)
{
return 1;
}
else
{
return 0;
}
}
void fed(int i, int sq[10])
{
sq[i / 100] = 0;
sq[i % 10] = 0;
int a = i / 10;
sq[a % 10] = 0;
}