1088三人行——C/C++実現

1543 ワード

タイトル
1088三人行(20 point(s))
子の曰わく、三人の行いには、必ず我が師あり.
本題は甲、乙、丙の3人の能力値の関係を与えます:甲の能力値は2位の正の整数であることを確定します;甲の能力値の2つの数字を位置を変えるのが乙の能力値です.甲乙二人の能力差は丙の能力値のX倍である.乙の能力値は丙のY倍である.誰があなたより強いのか、誰があなたより弱いのかを指摘してください.
入力形式:
1行に3つの数を入力します.M(自分の能力値)、X、Yの順です.3つの数字はいずれも1000を超えない正の整数です.
出力フォーマット:
一行の中でまず甲の能力値を出力して、それから順番に甲、乙、丙の3人とあなたの関係を出力します:もしそれがあなたより強いならば、Congを出力します;平等はPingを出力する.あなたより弱い場合はGaiを出力します.その間は1つのスペースで区切られており、行の先頭と末尾に余分なスペースがないようにしてください.
注意:解が一意でない場合は、甲の最大解を基準に判断する.解が存在しない場合、出力No Solution.
サンプル1を入力:
48 3 7

出力サンプル1:
48 Ping Cong Gai

入力サンプル2:
48 11 6

出力サンプル2:
No Solution

アルゴリズム#アルゴリズム#
フォーマットに注意します.丙は必ずしもint値ではなく、4.5のような数字~である可能性があるので、丙~i、j、kはそれぞれ甲乙丙~iを代表して99から10まで問題に合った数字を見つければよい~
コード#コード#
#include 
#include 
using namespace std;
int m, x, y;
void print(double t) {
    if (m == t) printf(" Ping");
    else if (m < t) printf(" Cong");
    else printf(" Gai");
}
int main() {
    scanf("%d %d %d", &m, &x, &y);
    for (int i = 99; i >= 10; i--) {
        int j = i % 10 * 10 + i / 10;
        double k = abs(j - i) * 1.0 / x;
        if (j == k * y) {
            cout << i;
            print(i); print(j); print(k);
            return 0;
        }
    }
    cout << "No Solution";
    return 0;
}