• PAT 乙级 1062 最简分数(20) C++版


    1062. 最简分数(20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    一个分数一般写成两个整数相除的形式:N/M,其中M不为0。最简分数是指分子和分母没有公约数的分数表示形式。

    现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为K的最简分数。

    输入格式:

    输入在一行中按N/M的格式给出两个正分数,随后是一个正整数分母K,其间以空格分隔。题目保证给出的所有整数都不超过1000。

    输出格式:

    在一行中按N/M的格式列出两个给定分数之间分母为K的所有最简分数,按从小到大的顺序,其间以1个空格分隔。行首尾不得有多余空格。题目保证至少有1个输出。

    输入样例:
    7/18 13/20 12
    
    输出样例:
    5/12 7/12

    思路:先求出两个分数中最小者min,然后求出i/K>min的第一个i值,以此做循环,条件为i/K<max,当然并不是所有的i都满足,在这里就需要求最大公约数,如果最大公约数为1则为最简

     1 // 1062.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 
     7 using namespace std;
     8 
     9 void swap(double& a, double& b);//交换函数
    10 int get_max(int x, int y);//求最大公约数
    11 
    12 int main()
    13 {
    14     int x1, y1, x2, y2, K, t = 0;
    15     char c;
    16 
    17     cin >> x1 >> c >> y1 >> x2 >> c >> y2 >> K;
    18 
    19     double m = 1.0*x1 / y1, n = 1.0*x2 / y2;
    20 
    21     if (m>n)//将m置为最小
    22         swap(m,n);
    23 
    24     for (int i = m*K + 1; 1.0*i/ K < n; ++i)
    25     {
    26         if (get_max(i, K) == 1)
    27         {
    28             if (t==0)
    29                 cout << i << "/" << K;
    30             else
    31                 cout <<" "<< i << "/" << K;
    32 
    33             ++t;
    34         }
    35     }
    36 
    37     cout << endl;
    38 
    39     return 0;
    40 }
    41 
    42 //求最大公约数
    43 int get_max(int x, int y)
    44 {
    45     int min = x, num = 1;
    46 
    47     if (y < min)
    48         min = y;
    49 
    50     while (min > 1)
    51     {
    52         if (x%min == 0 && y%min == 0)
    53         {
    54             x /= min;
    55             y /= min;
    56 
    57             num *= min;
    58         }
    59 
    60         --min;
    61     }
    62 
    63     return num;
    64 }
    65 
    66 //交换函数
    67 void swap(double& a, double& b)
    68 {
    69     double t = a;
    70     a = b;
    71     b = t;
    72 }
  • 相关阅读:
    360给腾讯造的盗梦空间
    C 语言 运算符优先级
    CorelDraw, Adobe Illustrator 转换到 Photoshop 形状路径
    用户体验经典解释
    禁用Windows XP的自动播放功能
    ObjectiveC ARC下的内存管理(一)
    ARC下的内存管理(二)对象及成员的引用关系
    天天撞墙
    PS: 操作不实时显示的解决办法
    摩托罗拉 Milestone新手刷机教程
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/7270630.html
Copyright © 2020-2023  润新知