贪心-埃及分数

Python 贪心法:真分数表示为埃及分数之和 贪心法:输入一个真分数,编写程序输出其表示为埃及分数之和的形式。如7/8=1/2+1/3+1/24,15/16=1/2+1/3+1/10+1/240,分母和分子分别由键盘分两次输入。 帮同学写实验报告,这是众多题目里面比较中意的一题,也是花时间比较多的一题。 解题思路 设原数值为f,f减去比该数值小一点或相等的最大的埃及分数1/c(<=f),其结果作为新的f=f-1/c,直到f=0。如何... 阅读详情

问题描述

把一个真分数表示为埃及分数之和的形式。所谓埃及分数,是指分子为1的分数。如7/8 = 1/2 + 1/3 + 1/24。

问题分析

一个真分数a/b,要寻找其最大的1/c,那么很容易想到的方法是枚举。但是枚举法效率不高,所以这里采用贪心算法。
a/b肯定为<1的数字,那么 c = b / a 既可以理解为b比a大多少倍,那么显然余数不为0 时c = b / a + 1。这样很容易找到最大的分数的分母。

算法设计

  1. 设某个真分数的分子为A(!=1),分母为B。
  2. 把B除以A的商的整数部分加1后的值作为埃及分数的分母 C。
  3. 输出 1/C。
  4. 将A乘以C减去B作为新的A。
  5. 将B乘以C作为新的B
  6. 如果A大于1且能整除B,则最后一个埃及分数的分母为B/A.
  7. 如果A=1,则最后一个分母为B;否则跳转到2步骤

代码实现

#include <stdio.h>

int main() {
    int a, b, c;      //a为分子,b为分母
    printf("请输入分子:");
    scanf("%d", &a);
    printf("请输入分母:");
    scanf("%d", &b);

    //如果是假分数,则出错
    if (a >= b) {
        printf("输入错误!\n");
        return -1;
    }

    printf("%d/%d=",a,b);

    //分子为1或者分数可以约分
    if (a == 1 || b % a == 0){
        printf("1/%d", b / a);
        return 0;
    }

    while (a != 1) {
        c = b / a + 1;     //计算出分母
        a = a * c - b;
        b = b * c;
        printf("1/%d",c);
        if (a > 1){
            printf(" + ");
        }

        if (b%a == 0 || a == 1){
            printf("1/%d",b/a);
            a = 1;
        }
    }

    return 0;
}
埃及分数[算法] 埃及同中国一样,也是世界文明古国之一。古埃及人只用分子为1的分数,在表示一个真分数时,将其分解为若干个埃及分数之和,例如:7/8表示为1/2+1/3+1/24。设计程序把一个真分数表示为最少的埃及分数之和的形式 这涉及到了贪心的思想,即,每一项都是减去前一项后,留下分子是1的最大真分数就可以了,所以如何找到真分数包含的最大埃及分数,就是解决问题的关键了。 设真分数为A/B,B除以A的整数部分为C,余数为D,则有下式成立: B=AC+D 即 B/A=C+D/A<C+1(因为D/A是小于1的,因此呢,C+D/A 阅读详情

相关推荐

贪心算法解埃及分数

题目描述 在古埃及,人们使用单位分数的和表示一切有理数。例如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中不允许有相同的。 对于一个分数a/b,表示方法有很多种,其中加数少的比加数多的好,如果加数个数相同,则最小的分数越大越好,例如:19/45=1/5+1/6+1/18是最优解。 思路 利用贪心算法,枚举出所有可能的解。 假设给的分数是 19/45,那么第一个分数我们可以从 1/3开始枚举(1/2>19/45舍去) 19/45-1/3=4/45 利用贪心算法的思想下一个分数选择

mycocoo的博客 2229

设计一个算法,把一个真分数表示为埃及分数之和的形式。所谓埃及分数是指分子为1的分数。如7、8=1/2+1/3+1/24。

数学模型:将一个真分数F表示为A/B;做B/A的整除运算,商为D,余数为K,它们之间的导出关系如下: B=A*D+k B/A=D+K/A#include <iostream> using namespace std;int main() { int a,b; int c,d; while (cin>>a>>b) { if (a >=

u011954296的博客 9108

贪心算法之埃及分数问题(附c++源代码)

感谢博主提供算法思路http://blog.youkuaiyun.com/tterminator/article/details/50927393 博主的是java代码,在这里写个c++代码,只是牛客网中有些很无语的例子,写为特殊情况后,AC // 将真分数分解为埃及分数.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #

xiao_Mrs_li的博客 4005

C语言——贪心算法。设计一个算法,把一个真分数表示为埃及分数之和的形式。所谓埃及分数是指分子为1的分数。例如3/5=1/2+1/10

要找出b/a的最大埃及数(a>b)。利用倒数即可推出最大埃及数 a/b=d.....k(余数) a=d*b+k; a/b=d+k/b;b/a=1/(d+k/b); 这里的k/b小于1;所以b/a的最大埃及数为1/(d+1) 分母大的反而小;然后对b/a做减法即可,(int c=d+1) 但不能直接用分数的形式做减法——b/a-1/(c)=(b*c-a)/(a*c); 然后就进行下一次的找最大埃及数 直到a/b没有余数即可。

Queen_kiss的博客 3901

贪心法解埃及分数问题

问题描述:   古埃及人只用分子分子为1的分数,在表示一个真分数时(分子   算法技术介绍:      贪心法解题介绍      其实以下的两种求解都是贪心法,只不过第一种在一个数学方法上显得有些笨拙。这种求解——找与当前分数最近的埃及分数,本来就很贪心。   问题思路:     在这里要明确一个概念,就是要尽可能用少的埃及分数表示一个真分数。     思路一:

小火龙的博客 4747

基于SECS协议开发的简明教程(1)

SEMI SECS MES E4 E5 E30 E37 HSMS SDK

L251210269的专栏 7627

埃及分数

埃及分数:埃及分数是指分子是1的分数,也叫单位分数。古代埃及人在进行分数运算时。只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。 题意:给你一个分数,要求输出最优(式子尽量短,每一个分数尽量大)的一组由埃及数组成的解 思路一:暴力,枚举1/2到1/n的所有情况,不过这样可能耗时比较大,而且可能存在乘法溢出的情况。 思路二:公式:例:a/b,q=b/a,r=b%a-->

Never__give__up的博客 6890

Ollama模型路径迁移实战:Windows/Mac/Linux三平台保姆级教程(附常见问题排查)

本文提供了一份详细的Ollama模型路径迁移教程,涵盖Windows、macOS和Linux三大平台。通过设置OLLAMA_MODELS环境变量或创建符号链接,指导用户将模型从默认路径安全迁移至新位置,以释放系统盘空间或提升性能。教程包含迁移前的准备、分平台步骤、迁移后的验证以及常见问题排查,确保迁移过程平滑可靠。

js777的博客 1184

贪心法——埃及分数

贪心法——埃及分数 古代埃及人在进行分数运算时。只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。 例如:7/8=1/2+1/3+1/24 一个真分数的埃及分数表示并不唯一 7/8也可以有如下表示: 7/8=1/8+1/8+1/8+1/8+1/8+1/8+1/8+1/8 贪心法,则是要让一个真分数被埃及分数表示的个数最少,每次选择不大于真分数的最大埃及分数 那么如何找到真分数包含的最大埃及分数呢? 设A为分子,B为分母,C为A/B,D为A%B B=A*C+D——》B/A=C+D/A,

qq_45602850的博客 1784

Zephyr、FreeRTOS 和 RT-Thread

你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)

is0815的博客 2240

5分钟搞定!用Coze+剪映小助手批量生成萌宠视频(附完整工作流配置)

本文详细介绍了如何利用Coze工作流与剪映小助手快速批量生成萌宠视频的完整方案。通过智能内容生成、素材处理、剪辑组装和输出适配四大模块的协同,实现5分钟内完成高质量视频制作。特别适合多宠物账号运营者,工作流支持模板切换和参数修改,大幅提升内容生产效率。

weixin_28678151的博客 389

埃及分数(贪心算法)

link. 思路为借鉴上个链接,代码为自己所写。 一、问题描述 把一个真分数表示成最少的埃及分数之和。 埃及分数即分子为1的分数。 二、问题分析 1、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。 2、具体步骤如下 步骤一 假设真分数N/M的分子为N,分母为M,则有下式成立 M = K * N + Z,其中Z必小于N 两边同时除以分子N后,可知 M/N = K + Z/N < K + 1 所以,必有下式成立 N/M > 1/K+1 所以,小于真分数N/M的最大埃及分数为1

sssupersjy的博客 9030

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 429

贪心埃及分数函数c语言,贪心算法之埃及分数问题

1、问题描述java把一个真分数表示成最少的埃及分数之和。算法埃及分数即分子为1的分数。测试2、问题分析spa一、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。.net二、具体步骤以下code步骤一blog假设真分数N/M的分子为N,分母为M,则有下式成立remM = K * N + Z,其中Z必小于Nget两边同时除以分子N后,可知ioM/N = K + Z/N <...

weixin_33846982的博客 1688

读懂 SAP Fiori Administration Catalogs:从管理员入口、权限编排到 Spaces 和 Pages 的落地实践

SAP Fiori 管理员目录的核心价值在于为系统配置提供标准化入口,解决权限与展示分离的问题。随着 SAP_UI 7.55 版本更新,SAP_FLP_ADMIN 角色整合了关键管理工具(如 Launchpad Designer、Content Manager),并通过 Business Catalog 和 Space 的协同作用,确保管理员既能访问配置工具,又能直观查看相关功能入口。项目实施中需注意配置层级(系统级/客户端级)的选择,以及多人协作时的数据同步问题,以提升交付效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 193

2023推免(夏令营+套实验室)面试总结(博文附问题汇总和参考答案)

2023推免(夏令营+套实验室)面试总结(博文附问题汇总和参考答案)

m0_51339444的博客 1804

贪心入门之——埃及分数问题

贪心入门之——埃及分数问题 问题描述: 古埃及人喜欢用最少的分子为1的真分数来表示一个真分数,比如7/8=1/2+1/3+1/24 那么算法上应该怎么实现呢? 假设现在我们需要求解真分数A/B(A与B不可约),那么假设 B=AC+D;那么B/A=C+D/A<C+1;那么A/B>1/(C+1);则按照我们贪心的思想的话1/(C+1)为A/B分解中最大的那个分子为1的真分数。那么我们假设E=(C+1);那么相减以后得到A/B-1/E=(AE-B)/BE;那么得到新的A=AE-B,B=B*E,然后

qq_44932835的博客 1803

Halcon那些事:Halcon非常核心的1个概念reduce_domain算子的理解和1个详细的使用示例

Reduce是减少的意思。并不是真的去裁剪图像,而是定义一个“感兴趣的区域(Region of Interest, ROI)”。后续的图像处理算子将只在这个定义的区域内有效,区域外的像素将被忽略。在一张白纸(完整图像)上放一张镂空的纸板(Domain)。我们后续的绘画(图像处理操作)只会透过镂空的部分影响到下面的白纸。镂空纸板之外的部分保持不变,也不会被处理。关键步骤:使用ReduceDomain,将图像的域限制为ROI区域,图像在原来图像基础上存在图像区域。

十多年IT经验,专注机器视觉,智能制造半导体行业 577

贪心算法应用:埃及分数问题详解

贪心算法应用:埃及分数问题详解

专注分享技术、实用优质教程、资源 1862

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

贪心算法——埃及分数问题

贪心算法之埃及分数问题 ...

weixin_44602007的博客 3314

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【C语言】埃及分数(应用算法:贪心算法)

原理(手写的,以后慢慢敲上去) 【代码】 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define maxSize 10 int main() { int a, b;//分子,分母 int q;//商数 a = 8, b...

Read by heart 4506

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

贪心算法之埃及分数问题

下一步再寻找N/M - 1/K+1的最大埃及分数,通分后也即寻找真分数(N*(K+1) - M)/M*(K+1)的最大埃及分数。在开始之前,需要先把(N*(K+1) - M)/M*(K+1)约分,也即寻找分子与分母的最大公约数,详见博文。1、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。假设真分数N/M的分子为N,分母为M,则有下式成立。所以,小于真分数N/M的最大埃及分数为1/K+1。步骤一和步骤二循环执行,直到分子为1。埃及分数即分子为1的分数。两边同时除以分子N后,可知。

weixin_67271870的博客 944

埃及分数C语言算法,2019-02-27 埃及分数 (贪心算法简单示例)

1 . 问题埃及分数是指分子是1的分数,也叫单位分数。古代埃及人在进行分数运算时。只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。 [Baidu百科]给定一个分数,如7/8,我们可以把它表示为1/2 + 1/3 +1/24,埃及分数问题即把一个真分数表示为最少的埃及分数之和的形式。2. 贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就...

weixin_42144554的博客 1830

贪心算法求解埃及分数问题

现在,对于给定的一个分子小于分母的分数 a/b,请将其分解为若干个不同的埃及分数之和。随后,使用 1/b1+1/b2+⋯+1/bn的格式输出结果,其中,b1​,b2​,…在这道题中,贪心算法的思路是每一步都尽可能“贪婪”地选取最大的单位分数,使得减去该单位分数后剩下的部分仍然是一个正分数。以 1/b1+1/b2+⋯+1/bn 的格式输出结果,其中,b1​,b2​,…选定 1/x​ 后,我们用 a/b−1/x 计算剩余的分数。定义分子为 1 的分数为埃及分数,例如 1/2,1/100等。

weixin_56636520的博客 662
上一篇: MSP430系列单片机-读RAM数据烧写到Flash中
下一篇: MySQL优化
一叶知秋Autumn
博客等级 码龄10年 170粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值