1037. 在霍格沃茨找零钱(20)

来源:互联网 发布:三维软件 编辑:程序博客网 时间:2024/06/11 10:52

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱P和他实付的钱A,你的任务是写一个程序来计算他应该被找的零钱。

输入格式:

输入在1行中分别给出P和A,格式为“Galleon.Sickle.Knut”,其间用1个空格分隔。这里Galleon是[0, 107]区间内的整数,Sickle是[0, 17)区间内的整数,Knut是[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 <iostream>#include <stdio.h>using namespace std;struct Money{    int Galleon;    int Sickle;    int Knut;};int IsGreater(struct Money own , struct Money pay ){    int sum1 = (own.Galleon * 17 + own.Sickle) * 29 + own.Knut;    int sum2 = (pay.Galleon * 17 + pay.Sickle) * 29 + pay.Knut;    int flag = ( sum1 >= sum2)? 1 : 0;    return flag;}void Swap(struct Money *own , struct Money *pay ){    own->Galleon = own->Galleon + pay->Galleon;    pay->Galleon = own->Galleon - pay->Galleon;    own->Galleon = own->Galleon - pay->Galleon;    own->Sickle = own->Sickle + pay->Sickle;    pay->Sickle = own->Sickle - pay->Sickle;    own->Sickle = own->Sickle - pay->Sickle;    own->Knut = own->Knut + pay->Knut;    pay->Knut = own->Knut - pay->Knut;    own->Knut = own->Knut - pay->Knut;}struct Money Return(struct Money own , struct Money pay){    struct Money get;    if ( own.Knut >= pay.Knut){        get.Knut = own.Knut - pay.Knut;    }else{        own.Sickle--;        get.Knut = own.Knut + 29 - pay.Knut;    }    if ( own.Sickle >= pay.Sickle){        get.Sickle = own.Sickle - pay.Sickle;    }else{        own.Galleon--;        get.Sickle = own.Sickle + 17 - pay.Sickle;    }    get.Galleon = own.Galleon - pay.Galleon;    return get;}int main(){    struct Money pay;    struct Money own;    struct Money get;    scanf("%d.%d.%d %d.%d.%d",&pay.Galleon,&pay.Sickle,&pay.Knut,&own.Galleon,&own.Sickle,&own.Knut);    get.Galleon = 0;    get.Sickle = 0;    get.Knut = 0;    if (IsGreater(own, pay) == 0){        Swap(&own,&pay);        get = Return(own,pay);        get.Galleon = - get.Galleon;    }else{        get = Return(own,pay);    }    cout<<get.Galleon<<"."<<get.Sickle<<"."<<get.Knut;    return 0;}

这里写图片描述

1 0