、、10、、暴力枚举

暴力是一种有着特殊美学意义的事物,对于许多东西,在需要进行计算的时候,将其所有的组合给排列出来也是一种很好的选择,今天的题目,是一个希望计算火柴可以摆出的等式的个数;
题目如下:
在这里插入图片描述
挺麻烦的地方在于,每一个数需要的火柴数其实是没有规律的,在想要得到一个等式的话,就要有可以将所有火柴转换成数字的一个数组;
于是衍生数一个想法,用数组来表示每一个数需要的火柴数:
num【10】={6,2,5,5,4,5,6,3,7,6}
然后加上一个算法,从1开始枚举出每一个符合算法等式的几个数,而且满足题目的要求,代码如下:

#include<iostream>
using namespace std;int nu[10]={6,2,5,5,4,5,6,3,7,6};//定义个辅助数组记录每个数字所需的火柴数
int matches(int num){    //一个用来计算一个数需多少个火柴棒的函数
         int i,k=0;       //K是火柴棒的数量
         for(i=num;i!=0;i/=10)k+=nu[i%10];    //将这个数字每一位的火柴棒的数量都计算出来
         if(num==0)k+=nu[0];      //有一种特殊情况:数字为0此时不会执行上述程序,所以加一个
         return k;
}
int main(){
    int i,j,all=0,n;    //all是符合条件的算式总数
    cin>>n;     
        for(i=0;i<=1000;i++)for(j=0;j<=1000;j++)if(matches(i)+matches(j)+matches(i+j)+4==n)all++;    //如果这个算式加起来的火柴棒总数刚好用完所有火柴棒就把数量往上加
        cout<<all;
        return 0;
}

简单粗暴,思路清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值