給你n根火柴棍,你能夠拼出多少個形如「A+B=CA+B=C」的等式?等式中的AA、BB、CC是用火柴棍拼出的整數(若該數非零,則最高位不能是00)。用火柴棍拼數字0-90−9的拼法如圖所示:html
注意:ios
加號與等號各自須要兩根火柴棍數組
若是A≠BA=B,則A+B=CA+B=C與B+A=CB+A=C視爲不一樣的等式(A,B,C>=0A,B,C>=0)spa
nn根火柴棍必須所有用上code
一個整數n(n<=24)n(n<=24)。htm
一個整數,能拼成的不一樣等式的數目。blog
輸入#1ci
14 |
輸出#1io
2 |
輸入#2table
18 |
輸出#2
9 |
【輸入輸出樣例1解釋】
22個等式爲0+1=10+1=1和1+0=11+0=1。
【輸入輸出樣例2解釋】
99個等式爲:
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
#include<iostream> using namespace std; int a[10]={6,2,5,5,4,5,6,3,7,6}; //將每個數字的對應所需的火柴數存入對應的數組中 int b[2001]={6}; //將數字爲0的火柴數定義爲6個,因爲須要的數字能夠組成最多三位數字,且符合條件n(所給火柴數)<=24 int main(){ int n; int count=0; cin>>n; for(int i=1;i<2001;i++){ //將每個數字(包括10~2000)所對應的火柴數寫入相應的數組中,例:b[10]=a[0]+a[1];而在前面完成了b[1]=a[1],b[2]=a[2],... ,因此b[j]=b[j]+a[j%10];j/=10;(j=i;) int j=i; while(j>=1){ b[i]+=a[j%10]; j/=10; } } for(int i=0;i<=1000;i++){ for(int j=0;j<=1000;j++){ if(b[i]+b[j]+b[i+j]==(n-4)){ //從0~2000中尋找符合這個條件的i和j,同時第三個數i+j也就肯定下來了,知足就++ // cout<<i<<"+"<<j<<"="<<i+j<<endl; //這個是輸出全部的知足條件的火柴棒等式 count++; } } } cout<<count; return 0; }
結果:
注意:洛谷中對於數組的要求很嚴格,這個數組中必須到2000,是由於這個能夠到三位數進行加減,可是若是後面不進行定義,則會默認爲0,也會使得火柴棒等式知足,因此到2000,是知足了n<=24的極限條件,同時會使等式符合;