[NEFU 358] 埃及分数 [迭代加深]
来源:互联网 发布:2010年的网络歌曲大全 编辑:程序博客网 时间:2024/06/04 19:09
把一个分数分解为若干个互不相同的分子为1的分数的和
迭代加深搜索,假设分解为k个分数的和,若搜索失败则k++
题目坑...他说最大的分母最小,若相同则次大的分母最大...实际上是最大的分母最小,若相同则最小的分母最小,然后次小的分母最小..
#include <cstdio>#include <cstring>int ans[11],p,d[11],m;int gcd(int a,int b) {int c=a%b;while (c) {a=b;b=c;c=a%b;}return b;}bool dfs(int a,int b,int c,int n) {int z=gcd(a,b);a/=z;b/=z;if (a==1&&b>=c&&n==1) {m=ans[n]=b;//for (int i=1;i<11;i++) printf("%d ",ans[i]);//printf("%d %d\n",d[n],ans[n]);if (d[n]==0||d[n]>ans[n]) memcpy(d,ans,sizeof(d));/*else if (d[n]==ans[n]) {for (int i=2;i<11;i++) {if (d[i]<ans[i]) {memcpy(d,ans,sizeof(d));return true;} else if (d[i]>ans[i]) {return true;}}}*/return true;}if (n==1) return false;int t=n*b/a;if (m!=0&&m-1<t) t=m-1;bool flag=false;for (int i=c>b/a+1?c:b/a+1;i<=t;i++) {ans[n]=i;int x=i*a-b,y=i*b;if (dfs(x,y,i+1,n-1)) {flag=true;}}return flag;}int main() {int a,b,n;while (scanf("%d%d",&a,&b)!=EOF) {d[1]=0;n=1;m=0;while (p=0,!dfs(a,b,1,n)) n++;printf("%d/%d=1/%d",a,b,d[n]);for (int i=n-1;i>0;i--) printf("+1/%d",d[i]);printf("\n");}return 0;}
0 0
- [NEFU 358] 埃及分数 [迭代加深]
- NEFU 358 埃及分数(迭代加深,数学)
- 埃及分数-迭代加深
- 埃及分数 迭代加深搜索 IDS
- 迭代加深搜索 埃及分数
- 埃及分数,迭代加深搜索
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜)
- 埃及分数题解[迭代加深搜索]
- 埃及分数(迭代加深搜索)
- 迭代加深搜索(埃及分数)
- 迭代加深搜索与埃及分数
- 埃及分数问题(迭代加深搜索)
- 埃及分数 迭代加深搜索 IDA*
- 埃及分数(迭代加深搜索)
- 迭代加深搜索--埃及分数
- [codevs1288]埃及分数 迭代加深搜索
- IP编址
- 关于Android SDK 更新 问题
- A - Financial Management(1.1.1)
- firefly笔记之配置文件config.json
- LINUX下查看系统资源以及性能查看
- [NEFU 358] 埃及分数 [迭代加深]
- HDU2037小技巧
- HDOJ1000
- 【转载】Android智能手机远程视频监控的设计
- Unity3d中利用C#操作SQLite数据库
- 打算
- 黑马程序员---高新技术
- 阿萨德
- 打啊