问题描述
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
解决
思路
全排列
代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int buf[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
do {
int n1 = 0;
for (int i = 0; i < 7; ++i) {
n1 *= 10;
n1 += buf[i];
int n2 = 0;
for (int j = i + 1; j < 8; ++j) {
n2 *= 10;
n2 += buf[j];
int n3 = 0;
for (int k = j + 1; k < 9; ++k) {
n3 *= 10;
n3 += buf[k];
}
if (n2 % n3 == 0)
if (n1 + n2 / n3 == 100) {
cout << n1 << "+" << n2 << "/" << n3 << "=100" << endl;
}
}
}
} while (next_permutation(buf, buf + 9));
return 0;
}