Skip to content

Latest commit

 

History

History
53 lines (39 loc) · 1.93 KB

1088. 三人行.md

File metadata and controls

53 lines (39 loc) · 1.93 KB

【PAT B-1088】三人行

题意概述

子曰:三人行,必有我师焉。择其善者而从之,其不善者而改之。

本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是 2 位正整数;把甲的能力值的 2 个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的 X 倍;乙的能力值是丙的 Y 倍。请你指出谁比你强应从之,谁比你弱应改之

输入输出格式

输入在一行中给出三个正整数,依次为:M(你自己的能力值)、X 和 Y。

在一行中首先输出甲的能力值,随后依次输出甲、乙、丙三人与你的关系:如果其比你强,输出Cong;平等则输出Ping;比你弱则输出Gai。其间以 1 个空格分隔,行首尾不得有多余空格。注意:如果解不唯一,则以甲的最大解为准进行判断;如果解不存在,则输出No Solution

数据规模

$$0<M,X,Y \le1000$$

算法设计

由于甲只可能是两位整数,并且如果有多解时以甲的最大解为准进行判断,可以让甲从数字 99 到数字 10 进行枚举,按要求搜索出的第一个符合条件的甲即为所求,然后按要求进行输出即可。

注意点

丙不一定是整数,可以是浮点数,所以要定义成 double 类型。

C++代码

#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    array<double, 3> p{};
    gg mi, xi, yi;
    cin >> mi >> xi >> yi;
    for (gg i = 99; i >= 10; --i) {
        gg j = i % 10 * 10 + i / 10;
        p = {i * 1.0, j * 1.0, j * 1.0 / yi};
        if (abs(p[2] - abs(i - j) * 1.0 / xi) < 1e-6) {
            cout << p[0];
            for (auto i : p) {
                cout << ' ' << (i > mi ? "Cong" : i < mi ? "Gai" : "Ping");
            }
            return 0;
        }
    }
    cout << "No Solution";
    return 0;
}