whenever

  • Home

  • Tags21

  • Categories6

  • Archives122

  • About

PAT乙级1088 || 三人行(详解,C/C++示例,测试点分析)

Posted on 2019-12-30 In PAT

三人行

题目描述

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

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

输入格式

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

输出格式

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

注意:如果解不唯一,则以甲的最大解为准进行判断;如果解不存在,则输出 No Solution。

输入样例1

1
48 3 7

输出样例1

1
48 Ping Cong Gai

输入样例2

1
48 11 6

输出样例2

1
No Solution

问题解决

解题思想

遍历甲的所有可能取值,并由此求出乙的,根据甲乙丙三者满足的关系式进行来确定甲的解。因为解不唯一时要按甲取最大解的情况处理,因此,甲从最大可能取值到最小可能取值进行遍历。一旦得到解就直接退出即可。

坑点提醒

测试点3

开始时对题目的一处叙述理解错误,题中说甲的能力值确定是 2 位正整数,即甲是两位正整数,而不是甲的两位数字都是正整数,甲的个位是可以取0的,这一点理解处理错误将导致测试点3答案错误。

测试点4

丙的取值类型题目没有说,但是甲乙都限制为正整数,我们很容易将丙也处理为正整数,这样将导致测试点4出错,实际上丙为浮点数也可以满足题意的。

代码示例(C/C++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <cmath>
using namespace std;
void out_put(double p, double m) {
string str;
p > m ? str = " Cong" : (p < m ? str = " Gai" : str = " Ping");
cout << str;
}
int main() {
int m, x, y, a, b, flag = 0;
double c;
cin >> m >> x >> y;
for (int i = 9; i >= 1; i--) { //十位
for (int j = 9; j >= 0; j--) { //个位,注意j可取到0
a = i * 10 + j;
b = j * 10 + i;
if (abs(a - b) * y == b * x) {
c = abs(a - b) / double (x); //note
flag = 1;
break;
}
}
if (flag) { //注意是双层循环,第二层不要忘记跳出,否则解不唯一时就不能保证甲取最大解
break;
}
}
if (flag) {
cout << a;
out_put(double (a), double (m));
out_put(double (b), double (m));
out_put(c, double (m));
}
else {
cout << "No Solution";
}
return 0;
}

题目来源:PAT乙级1088
作者:CHEN, Yue
单位:浙江大学

稀罕作者
Mengzhao Wang WeChat Pay

WeChat Pay

Mengzhao Wang Alipay

Alipay

# C/C++ # PAT # 编程
PAT乙级1087 || 有多少不同的值(详解,C/C++示例,测试点分析)
PAT乙级1089 || 狼人杀-简单版(详解,C/C++示例,测试点分析)
  • Table of Contents
  • Overview
Mengzhao Wang

Mengzhao Wang

Try? All the way !
122 posts
6 categories
21 tags
  1. 1. 三人行
    1. 1.1. 题目描述
    2. 1.2. 输入格式
    3. 1.3. 输出格式
    4. 1.4. 输入样例1
    5. 1.5. 输出样例1
    6. 1.6. 输入样例2
    7. 1.7. 输出样例2
    8. 1.8. 问题解决
      1. 1.8.1. 解题思想
      2. 1.8.2. 坑点提醒
      3. 1.8.3. 代码示例(C/C++)
© 2021 Mengzhao Wang