/* 有是一道有关暴力枚举的题目,其实题目很简单,就是给你m根火柴,看你能摆出来多少 个逻辑上成立的加法等式,不难发现,去掉+和=就只剩下了m-4根火柴来组成数字了, 那么我们只需要依次枚举A,B,C就可以达到要求了,为了减少时间的复杂度,我们只要 枚举两个变量A,B就好C的枚举可以通过A+B得到,那么我们就很容易的发现,时间复杂度 由原来的O(n3)-> O(n2)了,好了好了,开始枚举吧,这里有个小小的技巧,就是自己 写一个fun()函数,这个函数的作用当然就是数火柴了,也就是说,把A,B,C所需要的 火柴个数一个一个的算出来了,这个其实也很简单,就是和我们先前C上机时用到的输入 一个数字,计算这个数字的位数的思想是一样的,只不过这里的1不再是1,而是通过一个 简单的映射得到了一个新的数字,1->2,0->6,3->5,4->4,,,,然后一一匹配就好。 */ # include<cstdio> # include<iostream> using namespace std; int f[10] = {6,2,5,5,4,5,6,3,7,6}; int fun( int x ) { int num = 0; while ( x/10 > 0 ) { num+=f[x%10]; x/=10; } num += f[x]; return num; } int main(void) { int a,b,c; int m;cin>>m; int sum = 0; for ( int a = 0;a <= 1111;a++ ) { for ( int b = 0;b <= 1111;b++ ) { c = a+b; if ( fun(a)+fun(b)+fun(c) == m-4 ) { cout<<a<<"+"<<b<<"="<<c<<endl; sum++; } } } cout<<sum<<endl; }