zoukankan      html  css  js  c++  java
  • FZU1081 等分液体

     Problem Description 题目链接

    有三种容器R1,R2,R3,其容积分别是L,M,N。L,M,N 都是正整数且L=M+N。令R1 装满液体,试用最少的操作步骤 将 R1 中的液体均分。

     Input

    第一行仅包含一个表示测试例个数的正整数n 。以下n 行为 n个测试例的输入数据。每个测试例仅有一行输入数据,含三个正整数L,M,N (1<=L,M,N<=150),两数间用一个空格隔开。

     Output

    每个测试例都仅有一行输出,若有解,输出操作的次数,若无解则输出“no”。

     Sample Input

    3 100 70 30 90 60 30 80 45 35

     Sample Output

    9 no 15
     
    #include <iostream>
    using namespace std;
    
    /*
        思路:求出r1/2与r2、r1/2与r3、r2与r3的最大公约数
            1.如果r1/2与r2的最大公约数不等于r2与r3的最大公约数 或者r1/2与r3的最大公约数不等于r2与r3的公约数,说明倒液体的过程中无法凑出需要的等分液体
            2.根据规律可看出,如果公约数相等,那么r1/(r2与r3的最大公约数)-1就是倒液体的次数  
    */
    
    //最大公约数
    int gcd(int x, int y)
    {
        if (x % y == 0)
            return y;
        return gcd(y, x % y);
    }
    
    int main()
    {
        int n, r1, r2, r3;
    
        cin >> n;
        while (n--)
        {
            cin >> r1 >> r2 >> r3;
            int r2r3gcd = r2 > r3 ? gcd(r2, r3) : gcd(r3, r2);
            int r1r2gcd = r1 / 2 > r2 ? gcd(r1 / 2, r2) : gcd(r2, r1 / 2);
            int r1r3gcd = r1 / 2 > r3 ? gcd(r1 / 2, r3) : gcd(r3, r1 / 2);
    
            if (r1r2gcd != r2r3gcd || r1r3gcd != r2r3gcd)
                cout << "no" << endl;
            else
            {
                cout << (r1 / r2r3gcd - 1) << endl;
            }
        }
    }
  • 相关阅读:
    学习进度条2
    构建之法阅读笔记04
    团队项目——班级派发布视频
    四则运算3
    软件工程结对作业02四则运算四
    构建之法阅读笔记01
    构建之法阅读笔记02
    学习进度条4
    学习进度条1
    返回一个二维整数数组中最大联通子数组的和
  • 原文地址:https://www.cnblogs.com/dlvguo/p/12686063.html
Copyright © 2011-2022 走看看