C语言列出真分数序列代码及解析
问题描述
按递增顺序依次列出所有分母为60,分子小于60的最简分数。
问题分析
分子、分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数的分数,叫做最简分数,又称既约分数,如2/3,8/9,3/8等。
方法一:
求分子小于60的最简分数,对分子采用穷举的方法。根据最简分数定义知:分子分母的最大公约数为1,利用最大公约数的方法,判定分子与60是否构成真分数。
方法二:
分子、分母的公因数只有1的分数为最简分数,若分子、分母在1〜分子(num2)(题目要求分子小于60,分子、分母的公约数小于两者中的任意一个)之间除了1之外还有其他的公因数,则此分数肯定不是最简分数。
算法分析
变量num1、num2分别存储分母、分子的值。
方法一:
求最大公约数一般采用辗转相除的思想,具体步骤如下。 1. 用较大的数num1除以较小的数num2,得到的余数存储到变量temp中,temp=num1%num2。
2. 上一步中较小的除数num2和得出的余数temp构成新的一对数,并分别赋值给num1和num2,继续做上面的除法。
3. 当num2为0时,num1就是最大公约数,否则重复步骤 1、2。
方法二 :
分数的分子仍然采用穷举法。对于每一个可能的分子,都要判断在1〜num2范围内,分数num1/num2除了1之外是否有其他的公因数,循环初值为2。
在2〜num2内若有一个数j能同时整除分子、分母,说明此分数不是最简分数,j〜num2之间的数也无须再判断,利用break语句结束循环。循环结束时j<num2。循环过程中若没有一个数可以同时整除分子、分母即条件if(num1%j==0 && num2%j==0)不成立,则break语句不执行,循环正常结朿,即条件j<=num2不成立,循环结束时j>num2。利用j与num2的大小关系可判断分数是否为最简分数。
下面是方法一的完整程序:
#include<stdio.h>
int main()
{
int i, num1, num2, temp, n=; /*n记录最简分数的个数*/
printf("分母是60的真分数有:\n");
for(i=; i<; i++) /*穷举60以内的全部分子*/
{
num1 = ;
num2 = i;
/*采用辗转相除法求出最大公约数*/
while(num2 != )
{
temp = num1 % num2;
num1 = num2;
num2 = temp;
}
if(num1 == ) /*若最大公约数为1,则为最简真分数*/
{
n++;
printf("%2d/60 ", i);
if(n% == ) /*每行输出8个数*/
printf("\n");
}
}
return ;
}
下面是方法二的完整代码:
#include<stdio.h>
int main()
{
int i, num1, num2, j, n=; /*记录最简分数的个数*/
printf("The fraction serials with demominator 60 is:\n");
for(i=; i<;i++) /*穷举60以内的全部分子*/
{
num1 = ;
num2 = i;
for(j=;j<=num2; j++)
/*判断2~num2之间分子、分母是否有公约数,如果有j满足条件,则结束循环,说明此时的分数不是最简分数*/
if(num1%j== && num2%j==)
break;
if(j>num2)
/*若j>num2说明2~num2之间没有分子、分母的公约数,分数为最简分数*/
{
printf("%2d/60", i);
n++;
if(n% == )
printf("\n");
}
}
return ;
}
输出结果:
分母是60的真分数有:
/ / / / / / / /
/ / / / / / / /
C语言列出真分数序列代码及解析的更多相关文章
- C语言cJSON库的使用,解析json数据格式
C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...
- 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析
<编译原理>画 DAG 图与求优化后的 4 元式代码- 例题解析 DAG 图(Directed Acylic Graph)无环路有向图 (一)基本块 基本块是指程序中一顺序执行的语句序列, ...
- 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)
原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...
- Java打印整数的二进制表示(代码与解析)
Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)&g ...
- 编程算法 - 和为s的连续正整数序列 代码(C)
和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出全部和为s的连续正数序列(至少含有两个数). 起 ...
- Tinyhttpd - 超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client(Qt也有很多第三方HTTP类)
- 2. Tinyhttpd tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Htt ...
- 人脸跟踪开源项目HyperFT代码算法解析及改进
一.简介 人脸识别已经成为计算机视觉领域中最热门的应用之一,其中,人脸信息处理的第一个环节便是人脸检测和人脸跟踪.人脸检测是指在输入的图像中确定所有人脸的位置.大小和姿势的过程.人脸跟踪是指在图像序列 ...
- NSGA,NSGA-II,Epsilon-MOEA,DE C语言Deb教授原版代码
NSGA,NSGA-II,Epsilon-MOEA,Basic Differential Evolution (DE) C语言Deb教授原版代码地址 觉得有用的话,欢迎一起讨论相互学习~[Follow ...
- c语言心形告白代码实现
c语言心形告白代码实现 1.彩色告白 include<stdio.h> include<math.h> include<windows.h> include< ...
随机推荐
- Array.sort()
sort() : 是对数组的元素进行排序,并返回一个数组.默认排序方式是根据字符串的Unicode码表的码点. 由于取决于具体实现,所以无法保证它的时间和空间复杂度. arr.sort(compare ...
- MVC中调用模态框之后导致JS失效
今天在工作中碰到一个页面调用模态框之后,页面原来的JS失效的问题,由于前台经验较少,折腾了一天... 问题描述是这样,在页面,有两个下拉列表框A和B,做了下拉列表框联动,有一个button按钮会调用模 ...
- leetcode 刷题(3)--- 无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- ROADMAP
- 为什么要用docker
一:更高效的利用系统资源 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高.无论是应用执行速度.内存损耗或者文件存储速度,都要比传统 ...
- 汇编实验2(又是作业emm)
实验任务:学会使用debug 1.使用Debug,将程序段写入内存: 首先对0021:0000~0021:000F的内存赋值 这里我赋的值是 11 12 13 14 15 16 17 18 输入mov ...
- 【druid 】数据库连接池
一.数据库连接池架构 二.数据库连接池的过滤器 spi的思想,加载配置文件的Filter druid.filters.default=com.alibaba.druid.filter.stat.Sta ...
- Difference between ulimit, lsof, cat /proc/sys/fs/file-max
https://unix.stackexchange.com/questions/476351/difference-between-ulimit-lsof-cat-proc-sys-fs-file- ...
- Python连接Oracle数据查询导出结果
python连接oracle,需用用到模块cx_oracle,可以直接pip安装,如网络不好,可下载离线后本地安装 cx_oracle项目地址:https://pypi.org/project/cx_ ...
- linux与C内存管理机制
转自知乎专栏:https://zhuanlan.zhihu.com/p/51855842?utm_source=wechat_session&utm_medium=social&utm ...