全排列(全排列1~9数字求满足算式格式的个数)--10--全排列--蓝桥杯凑算式

题目描述

全排列(全排列1~9数字求满足算式格式的个数)--10--全排列--蓝桥杯凑算式_第1张图片 
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 
比如: 
6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。 
这个算式一共有多少种解法? 

输出

输出一个整数表示答案 
 
分析
  这是一道典型的全排列算法的应用。将1~9组成的序列全排列出来,再来挑选符合算式结构的情况。
  全排列的算法思想理解1:将 原序列中的 每个位置的数与 原序列该位置后面的每个数进行交换。
 1 #include 
 2 #include 
 3 #include 
 4 #include 
 5 #include 
 6 #include 
 7 using namespace std;
 8 typedef long long ll;
 9 const int n = 1*2*3*4*5*6*7*8*9+5;
10 vector<double>num[n];
11 int sum = 0;
12 void perm(vector<double>my,int l,int r){
13     if(l > r){
14         num[sum] = my;
15         for(int i = 0;i < 9;i++)
16               cout << my[i] <<" ";
17         cout << endl;
18         sum++;
19     }
20     else{
21         for(int i = l;i <= r;i++){
22             swap(my[l],my[i]);
23             perm(my,l + 1,r);
24             swap(my[l],my[i]);
25         }
26     }
27 }
28 int main(){
29     vector<double>my;
30     double a,b,c,D,E;
31     for(int i = 0;i < 9;i++){
32         my.push_back(i+1);
33     }
34     perm(my,0,8);
35     cout << sum <<endl;
36     int zz = sum;
37     for(int i = 0;i < zz;i++){
38          a = num[i][0];
39          b = num[i][1];
40          c = num[i][2];
41          D = num[i][3]*100.0+num[i][4]*10.0+num[i][5];
42          E = num[i][6]*100.0+num[i][7]*10.0+num[i][8];
43 
44         if(a+(b/c)+(D/E) != 10.0)
45             sum--;
46     }
47     cout << sum <<endl;
48     return 0;
49 }
50 
51                 

 

你可能感兴趣的:(全排列(全排列1~9数字求满足算式格式的个数)--10--全排列--蓝桥杯凑算式)