[PAT B1037]ホグワーツ魔法魔術学校での変化を探して

あなたはハリーポッターのファンなら、あなたは魔法の世界は、独自の金融システムを持って知っているよ-ハグリッドがハリーに言ったとおり「セブンティーンシルバーシックルズ(鎌)ガレオン(ガレオン)に対して、西に対する二十から九ナース(クヌート)非常に簡単にすることができます。「今、ハリーPが支払う価格を与えられ、彼が実際にお金を支払った、あなたのタスクは、彼が探しているしなければならない計算するプログラムを書くことです変更。
入力フォーマット:
PとAが行1に示されている入力は、フォーマットは「Galleon.Sickle.Knut」では、隙間によって分離されました。ここでガレオン[0、10 ^ 7]間隔の整数であり、鎌[0、17)セクション内の整数であり、クヌートは[0、29)セクション内の整数です。
出力形式:
出力ハリーは、同じ形式の行の入力を変更する必要があります。彼は十分なお金を持っていなかった場合、出力は負でなければなりません。
入力サンプル1:
10.16.27 14.1.28
出力サンプル1:
3.2.1
入力サンプル2:
14.1.28 10.16.27
出力サンプル2:
-3.2.1

#include <stdio.h>

int main() {
    int PG, PS, PK, AG, AS, AK;
    int G, S, K;
    bool enough = true;
    //P:应付的价钱 A:实付的价钱
    scanf("%d.%d.%d%d.%d.%d", &PG, &PS, &PK, &AG, &AS, &AK);
    // 1g=27s 1s=29k
    //默认A较大 否则交换
    int allA, allP;
    allA = (AG * 17 + AS) * 29 + AK;
    allP = (PG * 17 + PS) * 29 + PK;
    if (allA < allP) {
        enough = false;//钱不够
        int tempG, tempS, tempK;
        tempG = AG;
        tempK = AK;
        tempS = AS;
        AG = PG;
        AK = PK;
        AS = PS;
        PG = tempG;
        PS = tempS;
        PK = tempK;
    }
    //A-P G S K
    //K位
    if (AK < PK) {
        //向前借位
        if (AS != 0) {
            AS--;
            AK = AK + 29;
            K = AK - PK;
        } else {
            //再向前借位
            AG--;
            AS = AS + 16;
            AK = AK + 29;
            K = AK - PK;
        }
    } else {
        K = AK - PK;
    }
    //S位
    //A-P G S K
    if (AS < PS) {
        //向前借位
        AG--;
        AS = AS + 17;
        S = AS - PS;
    } else {
        S = AS - PS;
    }
    //G位
    G = AG - PG;
    if (enough)
        printf("%d.%d.%d", G, S, K);
    else printf("-%d.%d.%d", G, S, K);
    return 0;
}

ここに画像を挿入説明

公開された33元の記事 ウォンの賞賛1 ビュー4141

おすすめ

転載: blog.csdn.net/qq_39827677/article/details/103933824