Files
python/TangDou/CSP-J/J2-2024/sticks_prepare_1.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

61 lines
1.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
string s[7] = {"", "", "", "", "", "", ""};
/*
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 = 7; n <= 38; n++) {
// 最小值
mi = LONG_LONG_MAX;
// 开启第一轮次,目前拼接出的数字为0,并且还剩18根木棍
dfs(1, 0, n);
// 如果没有找到答案,输出-1
if (mi == LONG_LONG_MAX) {
cout << "n=" << n << ",ans=" << -1 << endl;
} else {
int q = n % 7;
string str = "n=" + to_string(n) + ",ans=" + to_string(mi);
if (s[q] == "") {
s[q] = str;
} else {
s[q] = s[q] + "," + str;
}
}
}
for (int i = 0; i < 7; i++) {
cout << " " << s[i] << endl;
}
return 0;
}