1. 程式人生 > >noip200806火柴棒等式

noip200806火柴棒等式

pen system 一行 整數 試題 cnblogs sin 火柴棍 one

試題描述: 

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

輸入:

共一行,又一個整數n(n<=24)。

輸出:

共一行,表示能拼成的不同等式的數目。

輸入示例:

【輸入樣例1】14
【輸入樣例2】18

輸出示例:

【輸出樣例1】2
【輸出樣例2】9

解題思路:

先打一個表,然後就是模擬。

技術分享
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int n;
int main()
{
    int need[10010];
    memset(need,250,sizeof(need));
    need[0]=6;
    need[1]=2;
    need[2]=5
; need[3]=5; need[4]=4; need[5]=5; need[6]=6; need[7]=3; need[8]=7; need[9]=6; cin>>n; for(int i=10;i<=999;i++) { char c[4]; sprintf(c,"%d",i); int l=strlen(c); //cout<<l<<" "; need[i]=0;
for(int j=0;j<l;j++) { int a=c[j]-0; need[i]+=need[a]; } } n=n-4; int ans=0; for(int i=0;i<999;i++) for(int j=0;j<999;j++) { int k=i+j; if(need[i]+need[j]+need[k]==n) { ans++; //cout<<i<<"+"<<j<<"="<<k<<endl; } } cout<<ans; //system("pause"); } /*111+111=222*/
View Code

noip200806火柴棒等式