首页 > 代码库 > noip200806火柴棒等式
noip200806火柴棒等式
试题描述:
给你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*/
noip200806火柴棒等式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。