相近分解【省模拟赛】 - 蓝桥云课 (lanqiao.cn)
思路
逆向思维 ,不去枚举n,而是直接枚举n的各位数
因为第23不是很大,所以可以给各位数一个范围 这里给20 其实给10都可以,因为各位数最大就为9
各位数如果满足条件 那就放到一个set里面。
set是有序的 把第23个输出就是输出第23小
code
注意细节,写错了答案就错了,如下 a是错的,b是正确的:
#include <iostream>
#include <set>
using namespace std;
set<int> s;
int main() {
int cnt = 0;
for (int a = 1; a <= 10; ++a) {
for (int b = 1; b <= 10; ++b) {
for (int c = 1; c <= 10; ++c) {
if (abs(a - b) <= 2 &&
abs(a - c) <= 2 &&
abs(b - c) <= 2 ) { // 注意这里改成了等于号==
s.insert(a * b * c);
}
}
}
}
//此时set里面的值已经是有序的了
for (int a : s) {
++cnt;
cout << cnt << ":" << a << endl;
}
return 0;
}