PAT乙级 | 1088 三人行 (20分)

    科技2022-08-12  95

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

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

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

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

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

    输入样例 1:

    48 3 7

    输出样例 1:

    48 Ping Cong Gai

    输入样例 2:

    48 11 6

    输出样例 2:

    No Solution

    思路:根据题中信息我们可以得出一个等式:

    b / y = |a-b| / x

    题中又说了,a是一个两位数,b是a的逆序数,我们用一个嵌套for循环搞出a和b的值,就可以搞定c了,a和b存在的条件是

    a[1] / y == abs(a[0]-a[1]) / x

    如果在规定范围内ab无解,则输出No Solution.

    #include <iostream> #include <cmath> using namespace std; int main() { double m,x,y,a[3]; //abc分别用012表示 int i,tmp; cin >>m>>x>>y; for(i=99;i>=10;i--){ a[0]=i;a[1]=0; tmp=i; while(tmp){ //获取b a[1]=a[1]*10+tmp%10; tmp/=10; } if(a[1]/y==abs(a[0]-a[1])/x) break; } if(i==9) cout <<"No Solution"; //无解 else{ a[2]=a[1]/y; cout <<a[0]; for(i=0;i<3;i++){ if(a[i]==m) cout <<" Ping"; //相等 else if(a[i]>m) cout <<" Cong"; //大 else cout<<" Gai"; /} } return 0; }
    Processed: 0.011, SQL: 9