火柴棒等式

题目描述

给你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根火柴棍必须全部用上

var
 n,i,j,ans:longint;
 a:array[0..9]of longint=(6,2,5,5,4,5,6,3,7,6);
function rem(n:longint):longint;
var
 ls,i,c:longint;
 s:string;
begin
 rem:=0;//
一定要清零
 str(n,s);
 ls:=length(s);
 for i:=1 to ls do
  begin
   c:=ord(s[i])-48;//分出每一位
   rem:=a[c]+rem;//把每一位的火柴棒个数汇总
  end;
end;
begin
 read(n);
 for i:=0 to 1000 do//之所以是一千,可以算。24减去符号剩下20.火柴棒用得最少是2根,A+B=C中只有A.B.C是数字,所以20要除于3,得3,因为有余数,所以加一位,就是4位,一千。本题数据小,不然不可以一个一个枚举。
  for j:=0 to 1000 do//同上
   if rem(i)+rem(j)+rem(i+j)=n-4 then inc(ans);
  write(ans);
 end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值