【提高组NOIP2008】火柴棒等式
2017-12-15 21:20
741 查看
题目大意:
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。
用火柴棍拼数字0-9的拼法如图所示:
注意:
1. 加号与等号各自需要两根火柴棍
2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
3. n根火柴棍必须全部用上
A、B、C>=0
n<=24
预处理出每个数字要用到的火柴数,枚举所有可能
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。
用火柴棍拼数字0-9的拼法如图所示:
注意:
1. 加号与等号各自需要两根火柴棍
2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
3. n根火柴棍必须全部用上
A、B、C>=0
n<=24
题解:
枚举:预处理出每个数字要用到的火柴数,枚举所有可能
代码:
const num:array [0..9] of longint=(6,2,5,5,4,5,6,3,7,6); var a:array [0..1000] of longint; ans,i,j,n:longint; begin assign(input,'matches.in'); reset(input); assign(output,'matches.out'); rewrite(output); a[0]:=6; a[1]:=2; a[2]:=5; a[3]:=5; a[4]:=4; ans:=0; a[5]:=5; a[6]:=6; a[7]:=3; a[8]:=7; a[9]:=6; a[1000]:=20; readln(n); for i:=10 to 99 do a[i]:=a[i div 10]+a[i mod 10]; for i:=100 to 999 do a[i]:=a[i div 100]+a[i mod 100 div 10]+a[i mod 10]; for i:=0 to 1000 do for j:=0 to 1000 do if (i+j<=1000) and (a[i]+a[j]+a[i+j]+4=n) then inc(ans); writeln(ans); close(input); close(output); end.
相关文章推荐
- NOIP2008提高组火柴棒等式(模拟)——yhx
- 洛谷 P1149 火柴棒等式2008 NOIp提高组
- 洛谷-火柴棒等式-NOIP2008提高组复赛
- noip2008提高组——火柴棒等式
- 【枚举】Vijos P1496 火柴棒等式 【NOIP2008提高组第二题】
- NOIP 2008 提高组 复赛 matches 火柴棒等式
- 火柴棒等式(洛谷 1149 && NOIp2008 提高组 T2 )
- [NOIP2008] 提高组 洛谷P1149 火柴棒等式
- 2008NOIp提高组 火柴棒等式
- 【CS 1168】火柴棒等式 2008年NOIP全国联赛提高组
- NOIP 2008 火柴棒等式 解题报告
- NOIP2008 火柴棒等式
- [NOIP2008]笨小猴,火柴棒等式,传纸条,双栈排序
- NOIP2008 笨小猴 火柴棒等式 传纸条 双栈排序
- 【枚举】[NOIP2008]火柴棒等式
- [noip模拟]四道题 noip2008 笨小猴 noip2008 火柴棒等式 noip2008 双栈排序 noip2008 传纸条
- luogu1149【2008提高】火柴棒等式(模拟)
- 2008NOIP 火柴棒等式淫荡结题报告
- NOIP2008解题报告(C/C++)(笨小猴)(火柴棒等式)(传纸条)(双栈排序)
- NOIp2008 火柴棒等式