Files
python/TangDou/CSP-J/J2-2024/sticks_prepare_2.cpp

49 lines
1.5 KiB
C++
Raw Normal View History

2025-08-30 18:35:01 +08:00
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
// 声明一个结构体存储每个数字的木棍数
struct Node {
int num;
int cnt;
} a[6] = {{0, 6}, {1, 2}, {2, 5}, {4, 4}, {7, 3}, {8, 7}};
LL mi = LONG_LONG_MAX;
/*
u: 第几个数字
sum: 拼接出的数字
r: 剩余木棍数
*/
void dfs(int u, LL sum, int r) {
// 递归出口
if (r == 0) { // 如果剩余木棍数是0,说明拼接出了一个数字,输出即可
mi = min(mi, sum);
return;
}
// 遍历每个可能的数字,如果剩余木棍数够用,就选择这个数字
for (int i = 0; i < 6; i++) {
if (a[i].cnt <= r) { // 如果剩余木棍数够用,就选择这个数字
// 如果当前数字是6,并且是前导零,就选择6,否则选择0
int cur = (a[i].num == 0 && u == 1) ? 6 : a[i].num;
// 递归调用,拼接出下一个数字
dfs(u + 1, sum * 10 + cur, r - a[i].cnt);
}
}
}
int main() {
for (int n = 1; n <= 35; n++) {
// 最小值
mi = LONG_LONG_MAX;
// 开启第一轮次,目前拼接出的数字为0,并且还剩18根木棍
dfs(1, 0, n);
// 如果没有找到答案,输出-1
if (mi == LONG_LONG_MAX)
cout << "n=" << n << ",ans=" << -1 << endl;
else
cout << "n=" << n << ",ans=" << mi << endl;
}
return 0;
}