暴力是一种有着特殊美学意义的事物,对于许多东西,在需要进行计算的时候,将其所有的组合给排列出来也是一种很好的选择,今天的题目,是一个希望计算火柴可以摆出的等式的个数;
题目如下:
挺麻烦的地方在于,每一个数需要的火柴数其实是没有规律的,在想要得到一个等式的话,就要有可以将所有火柴转换成数字的一个数组;
于是衍生数一个想法,用数组来表示每一个数需要的火柴数:
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;
}
简单粗暴,思路清晰。