注意:
1. 加号与等号各自需要两根火柴棍
2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
3. n根火柴棍必须全部用上
共一行,又一个整数n(n<=24)。
共一行,表示能拼成的不同等式的数目。
#include<iostream> #include<string.h> using namespace std; int main() { int num[10]={6,2,5,5,4,5,6,3,7,6}; int n,s=0; cin>>n; n-=4; int i,j; int x,y,z,a,b,c; int flag1=0,flag2=0,flag3=0; for(i=0;i<=1000;i++) { for(j=0;j<=1000;j++) { x = i; y = j; z = x + y; flag1=0; flag2=0; flag3=0; a=0;b=0;c=0; while(x) //注意数为0无法进入循环 { a+=num[x%10]; x/=10; flag1 = 1; } if(flag1==0) a+=num[0]; while(y) { b+=num[y%10]; y/=10; flag2 = 1; } if(flag2==0) b+=num[0]; while(z) { c+=num[z%10]; z/=10; flag3 = 1; } if(flag3==0) c+=num[0]; if(a+b+c==n) { s++; } } } cout<<s; }
根据题目规定的24根火柴估计等式的大概取值范围(1000以内),用循环枚举两个加数,再看等式火柴数是否符合条件
原文:https://www.cnblogs.com/miliye/p/10274159.html