「PAT乙级真题解析」Basic Level 1088 三人行 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设给定三个数值ability, X, Y, 以及三个关系式(三元一次不等式组). 要求根据X, Y计算出满足三个关系式的最大解. 然后根据ability跟不等式组解出来的三个值的大小关系输出对应的关键字. 如果不等式组没有解, 则输出"No Solution".

#算法#数据结构#c语言#pat考试#需求分析

Table of Contents

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT (Basic Level) Practice 1088 三人行

问题分析

  • 题设给定三个数值ability, X, Y, 以及三个关系式(三元一次不等式组). 要求根据X, Y计算出满足三个关系式的最大解.
  • 然后根据ability跟不等式组解出来的三个值的大小关系输出对应的关键字.
  • 如果不等式组没有解, 则输出"No Solution".

完整描述步骤

  1. 获取输入: 你的能力值, 倍数X, 倍数Y
  2. 从99到10遍历甲的能力值:
    • 计算 乙的能力值 = 甲的能力值 % 10 * 10 + 甲的能力值 % 10
    • 计算 丙的能力值 = 绝对值(甲的能力值 - 乙的能力值) 除以 X
    • 检查甲乙丙能力值是否满足关系式:
      • 如果 乙的能力值 == 丙的能力值 * Y:
        • 输出甲的能力值
        • 输出你的能力值与甲的能力值之间的关系
        • 输出你的能力值与乙的能力值之间的关系
        • 输出你的能力值与丙的能力值之间的关系
        • 结束程度
  3. 输出"No Solution"

伪代码描述

  1. get input: your_ability, X, Y

  2. for ability_A in range(99, 9, -1):

    • calculate ability_B = ability_A % 10 * 10 + ability_A / 10;
    • calculate ability_C = abs(ability_B - ability_A) / X;
    • if ability_B == ability_C * Y:
      • print(ability_A);
      • print(relation between your_ability and ability_A);
      • print(relation between your_ability and ability_B);
      • print(relation between your_ability and ability_C);
      • end procedure;
  3. print("No Solution")

完整提交代码

/*
# 问题分析
题设给定三个数值ability, X, Y, 以及三个关系式(三元一次不等式组). 要求根据X, Y计算出满足三个关系式的最大解.
然后根据ability跟不等式组解出来的三个值的大小关系输出对应的关键字.
如果不等式组没有解, 则输出"No Solution".
 
# 完整描述步骤
1. 获取输入: 你的能力值, 倍数X, 倍数Y
2. 从99到10遍历甲的能力值:
    - 计算 乙的能力值 = 甲的能力值 % 10 * 10 + 甲的能力值 % 10
    - 计算 丙的能力值 = 绝对值(甲的能力值 - 乙的能力值) 除以 X
    - 检查甲乙丙能力值是否满足关系式:
        - 如果 乙的能力值 == 丙的能力值 * Y:
            - 输出甲的能力值
            - 输出你的能力值与甲的能力值之间的关系
            - 输出你的能力值与乙的能力值之间的关系
            - 输出你的能力值与丙的能力值之间的关系
            - 结束程度
3. 输出"No Solution"
 
# 伪代码描述
1. get input: your_ability, X, Y
2. for ability_A in range(99, 9, -1):
    - calculate ability_B = ability_A % 10 * 10 + ability_A / 10;
    - calculate ability_C = abs(ability_B - ability_A) / X;
    - if ability_B == ability_C * Y:
        - print(ability_A);
        - print(relation between your_ability and ability_A);
        - print(relation between your_ability and ability_B);
        - print(relation between your_ability and ability_C);
        - end procedure;
 
3. print("No Solution")
 
*/
 
 
#include <math.h>
#include <stdio.h>
 
void print(double your_ability, double others_ability) {
    if (your_ability == others_ability) {
        printf(" Ping");
    } else if (your_ability < others_ability) {
        printf(" Cong");
    } else {
        printf(" Gai");
    }
}
 
int main() {
    int your_ability, X, Y;
    scanf("%d %d %d", &your_ability, &X, &Y);
    for (int ability_A = 99; ability_A >= 10; ability_A--) {
        int ability_B = ability_A % 10 * 10 + ability_A / 10;
        double ability_C = abs(ability_B - ability_A) * 1.0 / X;
        if (ability_B == ability_C * Y) {
            printf("%d", ability_A);
            print(your_ability, ability_A);
            print(your_ability, ability_B);
            print(your_ability, ability_C);
            return 0;
        }
    }
 
    printf("No Solution");
    return 0;
}
「PAT乙级真题解析」Basic Level 1088 三人行 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果