贪心埃及分数函数c语言,贪心算法之埃及分数问题
1、问题描述java
把一个真分数表示成最少的埃及分数之和。算法
埃及分数即分子为1的分数。测试
2、问题分析spa
一、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。.net
二、具体步骤以下code
步骤一blog
假设真分数N/M的分子为N,分母为M,则有下式成立rem
M = K * N + Z,其中Z必小于Nget
两边同时除以分子N后,可知io
M/N = K + Z/N < K + 1
因此,必有下式成立
N/M > 1/K+1
因此,小于真分数N/M的最大埃及分数为1/K+1。
步骤二
下一步再寻找N/M - 1/K+1的最大埃及分数,通分后也即寻找真分数(N*(K+1) - M)/M*(K+1)的最大埃及分数。
在开始以前,须要先把(N*(K+1) - M)/M*(K+1)约分,也即寻找分子与分母的最大公约数,详见博文两正整数最大公约数。
约分以后再按步骤一的解法寻找最大埃及分数。
步骤三
步骤一和步骤二循环执行,直到分子为1。
3、算法代码
public void egyptFraction(int num1, int num2){
int trade = 0;
int maxComDiv = 0;
while(num1 > 1){
trade = num2 / num1 + 1;
System.out.println(1 + "/" + trade);
num1 = num1 * trade - num2;
num2 = num2 * trade;
maxComDiv = maxComDiv(num1, num2);
if(maxComDiv > 1){
num1 = num1 / maxComDiv;
num2 = num2 / maxComDiv;
}
}
System.out.println(1 + "/" + num2);
}
public int maxComDiv(int num1, int num2) {
int remaind = 0;
while(num2 != 0){
remaind = num1 % num2;
num1 = num2;
num2 = remaind;
}
return num1;
}
4、完整测试代码
public class Solution {
public static void main(String [] args){
int nums1 = 2;
int nums2 = 3;
egyptFraction(nums1, nums2);
}
public static void egyptFraction(int num1, int num2){
int trade = 0;
int maxComDiv = 0;
while(num1 > 1){
trade = num2 / num1 + 1;
System.out.println(1 + "/" + trade);
num1 = num1 * trade - num2;
num2 = num2 * trade;
maxComDiv = maxComDiv(num1, num2);
if(maxComDiv > 1){
num1 = num1 / maxComDiv;
num2 = num2 / maxComDiv;
}
}
System.out.println(1 + "/" + num2);
}
public static int maxComDiv(int num1, int num2) {
int remaind = 0;
while(num2 != 0){
remaind = num1 % num2;
num1 = num2;
num2 = remaind;
}
return num1;
}
}
5、运行结果
1/2
1/3
1/24
贪心埃及分数函数c语言,贪心算法之埃及分数问题相关推荐
- c语言贪心算法ppt,c语言(贪心算法).ppt
c语言(贪心算法).ppt ACM程序设计,杭州电子科技大学 刘春英 ,2018/12/23,2,最近几天,,你 了吗,AC,2018/12/23,3,每周一星(9),qfwr,2018/12/23, ...
- c语言贪心算法零钱问题,贪心算法(2)——找零钱问题
一.找零钱问题 例题1: 有 1 元,5元,10元,20元,100元,200元的钞票无穷多张.现在使用这些钞票支付X元,最少需要多少张钞票. X = 628 最佳支付方法: 3张200块的,1张20块 ...
- 【计算理论】计算复杂性 ( 阶段总结 | 计算理论内容概览 | 计算问题的有效性 | 语言与算法模型 | 可计算性与可判定性 | 可判定性与有效性 | 语言分类 ) ★
文章目录 一.计算理论内容概览 二.计算问题的 有效性 三.语言 与 算法模型 四.可计算性 与 可判定性 五.可判定性 与 有效性 六.语言分类 一.计算理论内容概览 计算理论分为 形式语言与自动机 ...
- 列举c语言的算法描述,C语言算法
在 编程 纳入必修课的趋势下,程序设计或App设计已是大部分学生必须具备的能力.而数据结构及其算法更是用来培养程序设计逻辑的基础理论,也是有志从事IT行业人员既基础又核心的课程. 本书采用丰富的图例来 ...
- C语言与算法设计技能培训
C 语言与算法设计技能培训 1 .用C语言实现下列各种排序:冒泡排序.选择排序.快速排序冒泡排序函数如下: /*n表示待排序的数据的个数*/ #define n 10 void maopao(int ...
- R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、使用subset函数进一步筛选生成的规则去除左侧规则中的冗余信息、获取更独特的有新意的关联规则
R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘).使用subset函数进一步筛选生成的规则去除左侧规则中的冗余信息.获取更独特的有新意的关联规则 目录
- R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可)
R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘).查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可) 目录
- R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest)、置信度最高的五条规则(top five
R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest).置信度最高的五条规则(top five ...
- 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
文章目录 一.通用图灵机和停机问题 二.可判定性 与 可计算性 三.语言 与 算法模型 一.通用图灵机和停机问题 利用 图灵 的结论 , 证明 有哪些 计算问题 是找不到 算法 进行判定的 ; 如 停 ...
最新文章
- http / 关于长连接和短链接的理解
- 学习python第十天
- 如何在ashx页面获取Session值(未将对象引用设置到对象的实例) (转)
- 【C语言进阶深度学习记录】五 C语言中变量的属性
- md5会重复吗_如何优雅地处理重复请求(并发请求)
- 数据中心操作人员:艰难地在针对VM构建的基础设施上运行容器
- 「ruby/MiniMagick」用MiniMagick处理图片
- 水桶平分 java_关于java:桶排序算法代码问题
- php配置mysql集群_【mysql集群】mysql集群配置
- android打开文件管理获取文件名,如何从android中的文件路径获取文件名
- Python 之pdb调试
- Fast R-CNN算法
- java(6)String Builder和String Joiner
- 查看java进程占用内存_如何查看java进程大批占用内存
- IDEA 2018.3.3 有效期至 2100
- 2021阿里云服务器购买攻略-618年中大促专场
- php html钓鱼源码,PHP全新仿QQ空间钓鱼源码
- Study - Material Design 浅析
- postgresql 致命错误
- 用vb编制一个计算机程序,VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。 VB源码 龚沛曾...
热门文章
- JAVA环境的安装配置
- excel多列合并成一列加符号_Excel多列变(合并)一列的方法详解
- 抖音提前批--后端开发
- MySql+Mybatis+Druid 优化之MyBatis批量删除、更新
- uniapp 实现在线签合同/签名/信息认证(无插件依赖)
- hsz6108d_交通运输部公告2011年第73号――-交通运输部法律法规-法邦网
- java语言while循环语句
- Java导出csv修正时间格式
- 腾讯2016实习生面试经验(已经拿到offer)
- CE MAPI实例讲解 --- IMAPIAdviseSink的一个例子(四)