洛谷 1149 火柴棒等式

2021-09-10 16:43:31 字數 1395 閱讀 4932

給你n根火柴棍,你可以拼出多少個形如「a+b=c」的等式?等式中的a、b、c是用火柴棍拼出的整數(若該數非零,則最高位不能是0)。用火柴棍拼數字0−9的拼法如圖所示:

注意:加號與等號各自需要兩根火柴棍

如果a≠b,則a+b=c與b+a=c視為不同的等式(a,b,c>=0)

nnn根火柴棍必須全部用上

輸入格式:

乙個整數n(n<=24)。

輸出格式:

乙個整數,能拼成的不同等式的數目。

輸入樣例#1:複製

14
輸出樣例#1:複製

2
輸入樣例#2:複製

18
輸出樣例#2:複製

9
【輸入輸出樣例1解釋】

2個等式為0+1=1和1+0=1。

【輸入輸出樣例2解釋】

9個等式為:

0+4=4

0+11=11

1+10=11

2+2=4

2+7=9

4+0=4

7+2=9

10+1=11

11+0=11

思路:本來想用搜尋做的,後來發現dalao的轉換實在是厲害。首先思考一下用到的火柴數最少的數字是1,那麼1111要用掉8根火柴,1111+1111=?這個等式要用掉8+8+2+2=20根火柴,已經非常接近題目中n的上限了,所以不妨假設一下在24根火柴的情況下使等式成立的最大數在2000以內。那麼我們可以預處理出2000內每乙個數所對應的火柴總數,然後列舉i、j看使sum[i]+sum[j]+sum[i+j]+4=n成立的個數就好了。

#include#includeusing namespace std;

int main()

; int sum[2005];

memset(sum,0,sizeof(sum));

sum[0]=6;

for(int i=1;i<=2000;i++)

}int n;

cin>>n;

int cnt=0;

for(int i=0;i<=1000;i++)

for(int j=0;j<=1000;j++)

if(sum[i]+sum[j]+sum[i+j]+4==n)

cnt++;

cout<

return 0;

}

題解 洛谷1149 火柴棒等式

給你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根火柴棍必須全部用...

洛谷 P1149 火柴棒等式

題目描述 給你n根火柴棍,你可以拼出多少個形如 a b c 的等式?等式中的a b c是用火柴棍拼出的整數 若該數非零,則最高位不能是0 用火柴棍拼數字0 9的拼法如圖所示 注意 加號與等號各自需要兩根火柴棍 如果a b,則a b c與b a c視為不同的等式 a b c 0 n根火柴棍必須全部用上...

洛谷P1149 火柴棒等式

題目 題目描述 給你n根火柴棍,你可以拼出多少個形如 a b ca b c 的等式?等式中的aa bb cc是用火柴棍拼出的整數 若該數非零,則最高位不能是00 用火柴棍拼數字0 90 9的拼法如圖所示 注意 加號與等號各自需要兩根火柴棍 如果a b,則a b c與b a c視為不同的等式 a,b,...