[数据结构]埃及分数(暴力,解答树,迭代加深搜索)
来源:互联网 发布:6数字域名 编辑:程序博客网 时间:2024/06/06 03:21
/*Name:埃及分数(迭代加深搜索)Actor:HTTime:2015年6月20日Error Reporte:1.分数比较大小方法}*/#include"stdio.h"#include"iostream"#include"string.h"using namespace std; int dep;int flag = 0;//成功的旗子int ans[10];//答案的每一个分母int rans[10];//真·答案的每一个分母int PK(int a, int b, int c, int d)//分数比较大小{if (a*d == b*c) return 0;if (a*d > b*c) return 1;//前者大if (a*d < b*c) return -1;//后者大}void dfs(int a, int b, int k, int set)//四个参数,前两个原分数,k是当前层数,set是当前最大的分母,由于无法重复,后面的只能比他更大{if (k == dep + 1) return;//出界int i;for (i = set;; i++)//每一层的搜索,继承与set的值{if (PK(a, b, (dep + 1 - k), i) == 1) break;if (PK(a, b, 1, i) == -1) continue;ans[k] = i;if (PK(a, b, 1, i) == 0) {memcpy(rans, ans, sizeof(ans));flag = 1; break;}dfs(a*i - b, b*i, k+1, i+1);//原分数减去新分数的计算公式}return;}void Work(int a, int b){for (dep = 1; dep <= 10; dep++)//迭代深搜{dfs(a, b, 1 ,2);if (flag)//简单的输出控制{printf("1/%d", rans[1]);for (int i = 2; i <= dep; i++)printf("+1/%d", rans[i]);cout << endl;break;}}}int main(){int a, b;while (cin >> a >> b){cout << a << "/" << b << "=";Work(a, b);}return 0;}/*不咋懂eg:#include"stdio.h"#include"iostream"#include"string.h"using namespace std;typedef long long LL;const int INF = ~0U >> 1;const int N = 10;int dep, flag;int ans[N], d[N];int gcd(int a, int b){return b ? gcd(b, a%b) : a;}//求最大公约void dfs(int a, int b, int k){if (k == dep + 1) return;if (b % a == 0 && b / a > d[k - 1]){d[k] = b / a;if (!flag || d[k] < ans[k])memcpy(ans, d, sizeof(d));flag = 1;return;}int s = b / a;if (s <= d[k - 1]) s = d[k - 1] + 1;int t = (dep - k + 1) * b / a;if (t > INF / b) t = INF / b;if (flag && t >= ans[dep])t = ans[dep] - 1;for (int i = s; i <= t; i++){d[k] = i;int m = gcd(i*a - b, b*i);dfs((i*a - b) / m, b*i / m, k + 1);}}void Work(int a, int b){d[0] = 1;flag = 0;for (dep = 1; dep <= N; dep++){dfs(a, b, 1);if (flag){printf("1/%d", ans[1]);for (int i = 2; i <= dep; i++)printf("+1/%d", ans[i]);cout << endl;break;}}}int main(){int a, b;while (cin >> a >> b){cout << a << "/" << b << "=";Work(a, b);}return 0;}*/
0 0
- [数据结构]埃及分数(暴力,解答树,迭代加深搜索)
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜索)
- 迭代加深搜索(埃及分数)
- 埃及分数(迭代加深搜索)
- 埃及分数 迭代加深搜索 IDS
- 迭代加深搜索 埃及分数
- 埃及分数,迭代加深搜索
- 埃及分数题解[迭代加深搜索]
- 迭代加深搜索与埃及分数
- 埃及分数问题(迭代加深搜索)
- 埃及分数 迭代加深搜索 IDA*
- 迭代加深搜索--埃及分数
- [codevs1288]埃及分数 迭代加深搜索
- codevs1288埃及分数-迭代加深搜索
- 埃及分数(迭代加深搜索)【转】
- 埃及分数(迭代加深搜索)【转】
- 解决Form或UserControl接收不到KeyDown等事件
- 黑马程序员——Java基础——集合类_3
- UVA 1103 Ancient Messages (DFS)
- C#垃圾回收和托管堆及堆栈
- struts2 总结
- [数据结构]埃及分数(暴力,解答树,迭代加深搜索)
- 2015062008 - 后退一步
- E. Vanya and Brackets(Codeforces Round #308 (Div. 2))
- 黑马程序员——着急惹的祸
- 6.20 androidstudio中使用TestCase
- 2015062009 - 端午祭
- SSH整合
- 卷积神经网络CNN
- fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS