您的位置:首页 > 其它

【提高组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

题解:

枚举:

预处理出每个数字要用到的火柴数,枚举所有可能

代码:

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: