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