zoukankan      html  css  js  c++  java
  • PTA 乙级 1062 最简分数 (20分) C/C++

     思路:输入两个分数的分子分母之后,为了之后方便进行比较,调整两分数的顺序为从小到大,分子从零开始进行累加到 k-1(i),判断通分后的分子(tmp)与分数1通分后的分子(cmp1),分数2通分后的分子(cmp2)进行比较,且保证将要输出的分子分母没有公约数(gcd)(更为方便理解的最大公约数的代码在1034 有理数的四则运算

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int gcd(int a, int b) {                    //求最大公约数
     6     return b == 0 ? a : gcd(b, a % b);
     7 }
     8 
     9 int main() {
    10     long k = 0, n1 = 0, n2 = 0, m1 = 0, m2 = 0;
    11     int flag = 0;
    12     scanf("%d/%d %d/%d", &n1, &m1, &n2, &m2);
    13     cin >> k;
    14     if (n1 * m2 > n2 * m1) {            //保证第一个分数小于第二个分数
    15         swap(n1, n2);
    16         swap(m1, m2);
    17     }
    18     for (int i = 0; i < k; ++i) {        //分子从零开始累加
    19         long tmp = i * m1 * m2;
    20         long cmp1 = n1 * m2 * k;
    21         long cmp2 = n2 * m1 * k;
    22         if (tmp > cmp1 && tmp < cmp2 && gcd(i, k) == 1) {    //通分后与分数1和分数2进行比较,且分子与分母没有公约数
    23             if (flag) cout << ' ';
    24             cout << i << '/' << k;
    25             flag = 1;
    26         }
    27     }
    28     return 0;
    29 }

    默默地一点点变强,细节决定成败
  • 相关阅读:
    导入数据库的命令
    截取字符串
    用decode函数实现行变列
    初始库存入库相关知识
    客户欠款余额账
    存货管理
    创建临时表(转)
    求余额
    学习浪潮系统
    oracle number类型
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13602043.html
Copyright © 2011-2022 走看看