名人说:故立志者,题练为学之心也;为学者,习计立志之事也。划火—— 王阳明
进度:C/C++语言100题练习计划专栏,柴棒目前87/100
🥇C/C++语言100题练习专栏计划:目的等式:巩固练习C/C++语言,增强上机、枚举动手实践能力,实现交流学习!题练
一、习计问题呈现
1.问题描述
Problem Description
给你 n n n 根火柴棍,划火你可以拼出多少个形如 A + B = C A+B=C A+B=C 的柴棒等式?等式中的 A A A、 B B B、等式 C C C 是枚举用火柴棍拼出的整数(若该数非零,则最高位不能是实现 0 0 0)。用火柴棍拼数字 0 ∼ 9 0\sim9 0∼9 的题练拼法如图所示:
注意:
加号与等号各自需要两根火柴棍;
如果 A ≠ B A\neq B A=B,则 A + B = C A+B=C A+B=C 与 B + A = C B+A=C B+A=C 视为不同的等式( A , B , C ≥ 0 A,B,C\geq0 A,B,C≥0);
n n n 根火柴棍必须全部用上。
2.输入输出
Input
一个整数 n ( 1 ≤ n ≤ 24 ) n(1 \leq n\leq 24) n(1≤n≤24)。
Output
一个整数,能拼成的不同等式的数目。
3.测试样例
样例1
Sample Input
14
Sample Output
2
样例2
Sample Input
18
Sample Output
9
★提示
【输入输出样例 1 解释】
2 2 2 个等式为 0 + 1 = 1 0+1=1 0+1=1 和 1 + 0 = 1 1+0=1 1+0=1。
【输入输出样例 2 解释】
9 9 9 个等式为
0 + 4 = 4 0+4=4 0+4=4、 0 + 11 = 11 0+11=11 0+11=11、 1 + 10 = 11 1+10=11 1+10=11、 2 + 2 = 4 2+2=4 2+2=4、 2 + 7 = 9 2+7=9 2+7=9、 4 + 0 = 4 4+0=4 4+0=4、 7 + 2 = 9 7+2=9 7+2=9、 10 + 1 = 11 10+1=11 10+1=11、 11 + 0 = 11 11+0=11 11+0=11。
【题目来源】
[NOIP2008 提高组] 火柴棒等式
二、源码实现
#includeusing namespace std;//定义一个辅助数组来记录每个数字所需的火柴数(0 ~ 9)int f[10]={6,2,5,5,4,5,6,3,7,6};//一个用来计算一个数需多少个火柴棒的函数int amount(int num){ //ans 火柴棒的数量 int i,ans=0; //将这个数字每一位的火柴棒的数量都计算出来 for(i=num;i!=0;i/=10) ans+=f[i%10]; //有一种特殊情况:数字为0此时不会执行上述程序,但是要考虑到,所以加上一个 if(num==0) ans+=f[0]; return ans;}int main(){ int i,j,sum=0,n,flag=0; //sum是符合条件的等式总数目 cin>>n; for(i=0;i<=1000;i++) for(j=0;j<=1000;j++) if(amount(i)+amount(j)+amount(i+j)+4==n)//如果这个等式加起来的火柴棒总数目,刚好需要用完所有火柴棒,就把数量往上加 flag++; sum=flag; cout<
★关于本题思路及枚举:
1、本题思路简述
题意其实可以简单理解为:根据所有的火柴根数,将这些火柴使用完,可以有多少符合要求的拼法
根据题意:
0要用6根火柴
1要用2根火柴
2要用5根火柴
3要用5根火柴
4要用4根火柴
5要用5根火柴
6要用6根火柴
7要用3根火柴
8要用7根火柴
9要用6根火柴
★注意: ‘+’ 和 ‘=’ 也分别需要2根火柴
例如:1+1=2 一共用了2(第一个1)+2(加号)+2(第二个1)+2(等号)+5(结果2)=13根火柴
根据这些,之后进行打表处理即可。
2、枚举
1️⃣枚举相关概念
枚举算法是我们在日常中使用最多的一种算法思想,它的核心思想是:枚举所有的可能,确定枚举对象、范围和判定条件;然后注意枚举可能的解并验证每个解是否是问题的解。
2️⃣常见的枚举结构
循环+判断
3️⃣枚举的优缺点
①优点
枚举算法一般是现实生活问题的“直译”,所以比较直观,易于理解
枚举算法建立在考察大量状态、甚至是穷举所有状态的基础上,所有算法的真确性容易证明
②缺点
枚举算法的效率取决于枚举状态的数量和单个状态枚举的代价,所以枚举效率相对来说比较低
三、测试结果
189--------------------------------Process exited after 1.408 seconds with return value 0请按任意键继续. . .
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心