这个算式中A-I代表1-9的数字,不同的字母代表不同的数字。 比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。 这个算式一共有多少种解法? 注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
答案:29
方法: 1、枚举 2、深搜 3、next_permutation()函数:全排列
1、枚举: #include<iostream> using namespace std; int main(){ double a,b,c,d,e,f,g,h,i; //除运算结果可能为小数,所以用dounle类型 int count=0; for(a=1;a<10;a++) for(b=1;b<10;b++) if(b!=a) for(c=1;c<10;c++) if(c!=a&&c!=b) for(d=1;d<10;d++) if(d!=a&&d!=b&&d!=c) for(e=1;e<10;e++) if(e!=a&&e!=b&&e!=c&&e!=d) for(f=1;f<10;f++) if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e) for(g=1;g<10;g++) if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f) for(h=1;h<10;h++) if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g) for(i=1;i<10;i++) if(i!=a&&i!=b&&i!=c&&i!=d&&i!=e&&i!=f&&i!=g&&i!=h) if(a+b/c+(d*100+e*10+f)/(g*100+h*10+i)==10) count++; cout<<count<<endl; return 0; } 2、深搜: #include<iostream> using namespace std; double a[10]; int sum; bool vis[10]; void fun(int step) { if(step==10){ if(a[1]+a[2]/a[3]+(a[4]*100+a[5]*10+a[6])/(a[7]*100+a[8]*10+a[9])==10) sum++; return ; } for(int i=1;i<=9;i++){ if(!vis[i]){ vis[i]=true; a[step]=i; fun(step+1); vis[i]=false; } } return; } int main() { fun(1); cout<<sum<<endl; return 0; } 3、next_permutation()函数: #include <iostream> #include <bits/stdc++.h> using namespace std; int main() { double a[10]={0,1,2,3,4,5,6,7,8,9};//添加0可以使sum计算时从下标1开始,方便查看 int count=0; while(next_permutation(a+1,a+10)){ double sum=a[1]+a[2]/a[3]+(a[4]*100+a[5]*10+a[6])/(a[7]*100+a[8]*10+a[9]); if(sum==10.0) count++; } cout<<count<<endl; return 0; }