1 /************************************************************************/ 2 /* 1 2 3 4 5 6 7 8 9 = 81 在1-9之间添加加减乘除号,使等式成立。 */ 3 /************************************************************************/ 4 #include <iostream> 5 using namespace std; 6 7 bool stop = false; //控制遍历终止 8 int count_ = 0; //计算结果数量 9 int count_loop = 0; //计算循环次数 10 11 void trans(int* arr, int index) //从右往左递增遍历 12 { 13 if(index < 0) 14 return; 15 int temp = arr[index] / 4; 16 if(temp <= 0) //判断是否需要进位 17 return; 18 arr[index] = arr[index] % 4; 19 if(index == 0) //判断是否已经遍历完 20 { 21 stop = true; 22 return; 23 } 24 arr[index - 1] += temp; 25 trans(arr, index - 1); 26 } 27 28 void show(int* symbol, int len) //处理每次遍历结果,并显示正确项 29 { 30 float number[9]= {1,2,3,4,5,6,7,8,9}; 31 int symbol_copy[9]; 32 for(int i = 0; i < 9; ++i) 33 { 34 symbol_copy[i] = symbol[i]; 35 } 36 /* 37 计算出带乘除号的结果,将前面的项置为0,符号沿用前面的符号 38 */ 39 for(int i = 0; i < len -1; i++) //合并乘除项 40 { 41 if(symbol_copy[i] == 2 || symbol_copy[i] == 3) 42 { 43 if(symbol_copy[i] == 2) //计算合并后的结果 44 { 45 number[i+1] = number[i] * number[i+1]; 46 } 47 else if(symbol_copy[i] == 3) 48 { 49 number[i+1] = number[i] / number[i+1]; 50 } 51 number[i] = 0;//合并后将前一个数置零 52 53 if(i == 0) 54 symbol_copy[i] = 0; 55 else 56 symbol_copy[i] = symbol_copy[i-1]; //乘除结果合并,符号替换成前面的符号 57 } 58 } 59 60 float num = number[0]; 61 for(int i = 0; i < len - 1; ++i) //计算结果 62 { 63 if(symbol_copy[i] == 0) 64 num += number[i+1]; 65 else if(symbol_copy[i] == 1) 66 num -= number[i+1]; 67 } 68 69 if(num == 81)//打印正确等式 70 { 71 count_++; 72 for(int i = 0; i < len -1; ++i) 73 { 74 cout<<i+1; 75 if(symbol[i] == 0) 76 cout<<"+"; 77 else if(symbol[i] == 1) 78 cout<<"-"; 79 else if(symbol[i] == 2) 80 cout<<"*"; 81 else if(symbol[i] == 3) 82 cout<<"/"; 83 } 84 cout<<"9=81"<<endl; 85 } 86 } 87 88 89 int main() 90 { 91 int symbol[9] = {0};// [0:+ 1:- 2:* 3:/] 92 int len = 9; 93 while(!stop) 94 { 95 show(symbol, len); 96 symbol[len-2]++; 97 trans(symbol, len-2); 98 count_loop++; 99 } 100 cout<<"有 "<<count_<<" 种可能"<<endl; 101 cout<<"遍历了"<<count_loop<<"次"<<endl; 102 system("pause"); 103 return 0; 104 }
时间: 2025-01-02 00:10:56