洛谷p1149火柴棒等式

題目描述

給你n根火柴棍,你能夠拼出多少個形如「A+B=CA+B=C」的等式?等式中的AA、BB、CC是用火柴棍拼出的整數(若該數非零,則最高位不能是00)。用火柴棍拼數字0-909的拼法如圖所示:html

注意:ios

  1. 加號與等號各自須要兩根火柴棍數組

  2. 若是A≠BA=B,則A+B=CA+B=C與B+A=CB+A=C視爲不一樣的等式(A,B,C>=0A,B,C>=0)spa

  3. 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的極限條件,同時會使等式符合;

相關文章
相關標籤/搜索