最简分数

PAT-B 1062 最简分数 (20分)

社会主义新天地 提交于 2020-03-05 01:31:05
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N ​1 ​​ /M ​1 ​​ 和 N ​2 ​​ /M ​2 ​​ ,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。 输入格式: 输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。 输出格式: 在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。 输入样例: 7/18 13/20 12 输出样例: 5/12 7/12 本题的测试点2 是因为题目没有告诉这两个分数到底是哪个大,所以需要自己判断 # include <iostream> # include <cstdio> # include <vector> using namespace std ; struct fengshu { int fengzi ; int fengmu ; } ; int func ( int a , int b ) { int t = a ; int k = b ; a = max ( t , k ) ; b = min ( t , k ) ; //a>b;

PAT乙级1062-----最简分数 (20分)

耗尽温柔 提交于 2020-02-26 11:43:56
1062 最简分数 (20分) 一个分数一般写成两个整数相除的形式: /,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 / 和 /,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。 输入格式: 输入在一行中按 / 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。 输出格式: 在一行中按 / 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。 输入样例: 7/18 13/20 12 输出样例: 5/12 7/12思路:暴力法——将分子[1,k]之间的每一个进行判断1.是否在区间内2.是否为最简首次通过代码: 1 #include<stdio.h> 2 int gcd(int a,int b){ 3 int i=a%b; 4 while(i!=0){ 5 a=b; 6 b=i; 7 i=a%b; 8 } 9 return b>0?b:1; 10 } 11 int main(){ 12 int a1,b1,a2,b2,k; 13 scanf("%d/%d %d/%d %d",&a1,&b1,&a2,&b2,&k); 14 int max_a,max_b,min_a,min_b;

pat乙1062 最简分数

蹲街弑〆低调 提交于 2020-01-31 01:06:45
# include <iostream> using namespace std ; struct fraction { //分数结构体 int up ; int down ; fraction ( ) { } } ; int gcd ( int a , int b ) //最大公约数 { if ( b == 0 ) return a ; else return gcd ( b , a % b ) ; } bool isbig ( fraction a , fraction b ) //比较分数大小 { int theup = a . up * b . down - a . down * b . up ; if ( theup > 0 ) return 1 ; else return 0 ; } bool iseasy ( fraction a ) //是否为最简分数 { int i = gcd ( a . up , a . down ) ; if ( i == 1 ) return 1 ; else return 0 ; } int main ( ) { fraction a , b , c ; int i , n = 0 , k , themax , thegcd , themin , temp ; float maxup , minup ; char c1 ; cin >>

1062 最简分数 (20分)

ⅰ亾dé卋堺 提交于 2019-12-22 02:19:41
1062 最简分数 (20分) 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N​1​​/M​1​​ 和 N​2​​/M​2​​,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。 输入格式: 输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。 输出格式: 在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。 输入样例: 7/18 13/20 12 输出样例: 5/12 7/12 分析:使⽤用辗转相除法gcd计算a和b的⼤大公约数,因为要列列出n1/m1和n2/m2之间的简分数,但是 n1/m1不不⼀一定⼩小于n2/m2,所以如果n1 * m2 > n2 * m1,说明n1/m1⽐比n2/m2⼤大,则调换n1和n2、m1和 m2的位置~假设所求的分数分⺟母为k、分⼦子num,先令num=1,当n1 * k >= m1 * num时,num不不断 ++,直到num符合n1/m1 < num/k为⽌止~然后在n1/m1和n2/m2之间找符合条件的num的值,⽤用 gcd(num, k

1062 最简分数(20)(20 分)

匿名 (未验证) 提交于 2019-12-03 00:29:01
1062 最简分数(20)(20 分) 一个分数一般写成两个整数相除的形式:N/M,其中M不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N~1~/M~1~ 和 N~2~/M~2~,要求你按从小到大的顺序列出它们之间分母为K的最简分数。 输入格式: 输入在一行中按N/M的格式给出两个正分数,随后是一个正整数分母K,其间以空格分隔。题目保证给出的所有整数都不超过1000。 输出格式: 在一行中按N/M的格式列出两个给定分数之间分母为K的所有最简分数,按从小到大的顺序,其间以1个空格分隔。行首尾不得有多余空格。题目保证至少有1个输出。 输入样例: 7/18 13/20 12 输出样例: 5/12 7/12 分析:从1~k-1进行遍历,判断每个分数是否在指定区间内,再判断他们的最大公约数是否不等于1(以此判断是否是最简分数)即可。还有一个需要注意的是,输入中的两个分数并没有说第一个一定小于第二个,如果不是,需要进行交换。 #include<iostream> #include<vector> #include<cstdio> using namespace std ; int gcd( int a, int b){ return b== 0 ?a:gcd(b,a%b); } int main() { vector < int > ans; int n1

PAT 1062 最简分数 C语言实现

我与影子孤独终老i 提交于 2019-11-27 13:48:09
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N​1​​/M​1​​ 和 N​2​​/M​2​​,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。 输入格式: 输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。 输出格式: 在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。 输入样例: 7/18 13/20 12 输出样例: 5/12 7/12 #include<stdio.h> #include<stdbool.h> bool is_yue(int a,int b) //判断分母a与分子b能不能约分 { if(a == 1) return true; for(int i = 2 ; i <= a ; i++) { if(0 == a % i) { if(0 == b % i) return true; } } return false; } int main() { double n1 = 0,n2 = 0,m1 = 0,m2 = 0; scanf("%lf/%lf %lf/%lf",