已开启
回溯法跳房子问题-湖北工业大学-邓翕宁-徐承志 #152
2301_81566275创建于 2025年7月8日
回溯法跳房子问题-湖北工业大学-邓翕宁-徐承志 #152
已开启
共 3 个文件变更+39-0
| @@ -0,0 +1,2 @@ | |||
| 1 | +回溯法:桥本分数 | ||
| 2 | +将1-9九个数不重复地赋给不同的9个元素 ,实现形如a/bc+d/ef=f/hi 的形式。例:1/26+5/78=4/39 1/32+5/96=7/84 (注意:1/26+5/78=4/39 和5/78+1/26=4/39 只能算一种解),共有多少种不同的解 | ||
| @@ -0,0 +1,37 @@ | |||
| 1 | +#include <iostream> | ||
| 2 | +#include <algorithm> | ||
| 3 | +#include <vector> | ||
| 4 | +using namespace std; | ||
| 5 | + | ||
| 6 | +int main() { | ||
| 7 | + vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9}; | ||
| 8 | + int count = 0; | ||
| 9 | + | ||
| 10 | + do { | ||
| 11 | + int a = nums[0], b = nums[1], c = nums[2]; | ||
| 12 | + int d = nums[3], e = nums[4], f = nums[5]; | ||
| 13 | + int g = nums[6], h = nums[7], i = nums[8]; | ||
| 14 | + | ||
| 15 | + int bc = 10 * b + c; | ||
| 16 | + int ef = 10 * e + f; | ||
| 17 | + int hi = 10 * h + i; | ||
| 18 | + | ||
| 19 | + long long left1 = (long long)a * ef * hi; | ||
| 20 | + long long left2 = (long long)d * bc * hi; | ||
| 21 | + long long right = (long long)g * bc * ef; | ||
| 22 | + | ||
| 23 | + if (left1 + left2 == right) { | ||
| 24 | + int comp1 = a * ef; | ||
| 25 | + int comp2 = d * bc; | ||
| 26 | + | ||
| 27 | + if (comp1 < comp2) { | ||
| 28 | + count++; | ||
| 29 | + } else if (comp1 == comp2 && a <= d) { | ||
| 30 | + count++; | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + } while (next_permutation(nums.begin(), nums.end())); | ||
| 34 | + | ||
| 35 | + cout << count << endl; | ||
| 36 | + return 0; | ||
| 37 | +} | ||