天天看點

1088 三人行 (PAT 乙級 中文 C/C++語言)

1088 三人行 (20 point(s))

子曰:“三人行,必有我師焉。擇其善者而從之,其不善者而改之。”

本題給定甲、乙、丙三個人的能力值關系為:甲的能力值确定是 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
           

分析:

1,甲為兩位數,并且當解不唯一時候輸出最大的解。故甲從 99~10 一個個判斷是否符合它們的關系。

2,注意到丙不一定為整數,可以是4.5等,若丙設為 int 會有一個 case 無法通過。

3,一旦找到符合它們關系的就按照要求輸出,并做标志,然後跳出循環。如果沒有符合條件的就輸出 No Solution 。

詳細代碼:

#include <iostream>     
#include <string>
#include <math.h>
using namespace std;
   
// 1088 三人行 (20 point(s))
int main(void){       
    string str[3]={"Ping","Gai","Cong"};
    int m,x,y,flag=0;
    cin>>m>>x>>y;

    int jia,yi;
    double bing;                 // 丙不一定為整數 可以如 4.5 
    for(int i=99;i>=10;--i){     // 兩位數
        jia = i;                 // 99~10
        yi = (jia%10)*10+jia/10; // 個位和十位換
        bing = 1.0*abs(jia-yi)/x;// 甲乙差為丙 x 倍
        if((bing*y) == yi){      // 判斷乙是否為丙的 y 倍  
            cout<<jia<<" "; 
            if(m>jia){
                cout<<str[1]<<" "; 
            }else if(m==jia){
                cout<<str[0]<<" "; 
            }else{
                cout<<str[2]<<" "; 
            } 
            if(m>yi){
                cout<<str[1]<<" "; 
            }else if(m==yi){
                cout<<str[0]<<" "; 
            }else{
                cout<<str[2]<<" "; 
            }
            if(m>bing){
                cout<<str[1]; 
            }else if(m==bing){
                cout<<str[0]; 
            }else{
                cout<<str[2]; 
            }
                 
            ++flag;
            break;
        }
    } 

    if(flag==0){
        cout<<"No Solution"; 
    }

    return 0;
} // guangjinzheng 2019.1.10 16:05
           

繼續閱讀