給你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,...