C++奥赛第一弹——编程实现火柴棍等式问题

今天给初中一个孩子讲一个很经典的问题,同时也是一个奥数题。记录一下吧
题目:函数(5)火柴棍等式
给你n根(n<=24)火柴棍,你可以拼出多少个形如“A+B=C"的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
在这里插入图片描述在这里我们要分析一下:
1.加号与等号各自需要两根火柴棍,也就是共需4根固定的火柴!
2.形如01数字就是不成立的,必须写成1!
3.如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
4.n (ns24)根火柴棍必须全部用上。
首先,这里我们练习函数的使用,所以我要求学生自己写一个函数用来将数字与火柴的根数相对应,之后我们需要将要想办法让任意一个数字输入可以求得这个数字需要几根火柴
接下来回到逻辑问题:我们怎样可以知道A、B、C、的值,通过思考我们知道使用循环进行尝试逐次累加,符合的话进行计数并输出
接下来是c++的代码:

#include <iostream>
using namespace std;
int matches[10]={6,2,5,5,4,5,6,3,7,6};
int n,t;
int getmatches(int x)
{
    int needs = 0,k;
    if(x==0) return matches[0];
    else{
        while(x!=0)
        {
            k=x%10;
            x/=10;
            needs+=matches[k];
        }
        return needs;
        
    }
}
int main()
{
    cout << "how many matches you want?" << std::endl;
    cin>>n;
    for(int i=0;i<1000;i++)
    for(int j=0;j<1000;j++)
    {
        if(getmatches(i)+getmatches(j)+4+getmatches(i+j)==n)
        {
            cout<<i<<"+"<<j<<"="<<i+j<<endl;
            t++;
        }
    }
    cout<<"you can get "<<t<<"'s 'results with "<<n<<"matches!";
    return 0;
}

小白girl的进阶之路!Fighting!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值