课程目录展开/折叠
2.3 枚举法【03】
视频时长:49:48播放快捷键
播放/暂停:空格(或鼠标单击) 全屏:F(或鼠标双击) 退出全屏:Esc
快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→
快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←
本节课讲解配套PPT&板书:








本节课讲解到的源代码
源代码下载:2.3 枚举法【03】-源代码下载
1. 【例题2-2】P1128-火柴棒等式【NOIP 2008 提高组 T2】-1
#include <bits/stdc++.h>
using namespace std;
int cnt[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int countNum(int n)
{
if (n == 0) return 6;
int res = 0; // res ret result中间结果 ans最终结果
while (n)
{
res += cnt[n % 10];
n /= 10;
}
return res;
}
int main()
{
int n;
cin >> n;
int ans = 0; // long long
int maxa = 0, maxb = 0;
for (int a = 0; a <= 1000; a ++)
{
for (int b = 0; b <= 1000; b ++)
{
int c = a + b;
if (countNum(a) + countNum(b) + countNum(c) + 4 == n)
{
// 打印调试
// cout << a << ' ' << b << ' ' << c << endl;
// maxa = max(maxa, a);
// maxb = max(maxb, b);
ans ++;
}
}
}
// cout << maxa << ' ' << maxb << endl;
cout << ans;
return 0;
}
2. 【例题2-2】P1128-火柴棒等式【NOIP 2008 提高组 T2】-2
#include <bits/stdc++.h>
using namespace std;
int cnt[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int cnt2[2005];
int countNum(int n)
{
if (n == 0) return 6;
int res = 0; // res ret result中间结果 ans最终结果
while (n)
{
res += cnt[n % 10];
n /= 10;
}
return res;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i <= 2000; i ++)
{
cnt2[i] = countNum(i);
}
int ans = 0; // long long
for (int a = 0; a <= 1000; a ++)
{
for (int b = 0; b <= 1000; b ++)
{
int c = a + b;
if (cnt2[a] + cnt2[b] + cnt2[c] + 4 == n)
{
ans ++;
}
}
}
cout << ans;
return 0;
}
本节课课后练习题
- 详见题单 - T1004 - CSP-J & GESP【课程4】算法 - 第2章 入门算法
本节课答疑
建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习
陈远龙老师视频讲解:如何使用DeepSeek进行答疑?
通过AI未能获得满意解答的,可以联系陈远龙老师答疑
目录