PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)

原题

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

代码

我的做法是把货币全部换成k来计算。理解起来容易,代价是比较费时。

#include <iostream>
using namespace std;

struct money{
    int g,s,k;
    void toK(){
        s+=g*17;
        k+=s*29;
        g=0;
        s=0;
    }
    void toNormal(){
        s=k/29;
        k=k%29;
        g=s/17;
        s=s%17;
    }
}a,b,c;

int main(){
    scanf("%d.%d.%d %d.%d.%d",&a.g,&a.s,&a.k,&b.g,&b.s,&b.k);
    a.toK();
    b.toK();
    if(a.k>b.k){
        cout<<'-';
        c.k=a.k-b.k;
        c.toNormal();
        printf("%d.%d.%d\n",c.g,c.s,c.k);
    }
    else{
        c.k=b.k-a.k;
        c.toNormal();
        printf("%d.%d.%d\n",c.g,c.s,c.k);
    }
}

代码2

在这里贴一下柳神的代码。要写出这样的代码比较考验仔细度,要时刻保持脑子清醒。

#include <iostream>
using namespace std;
int main() {
    int a, b ,c, m, n, t, x, y, z;
    scanf("%d.%d.%d %d.%d.%d",&a, &b, &c, &m, &n, &t);
    if (a > m || (a == m && b > n) || (a == m && b == n && c > t)) {
        swap(a, m); swap(b, n); swap(c, t);
        printf("-");        
    }
    z = t < c ? t - c + 29 : t - c;
    n = t < c ? n - 1 : n;
    y = n < b ? n - b + 17 : n - b;
    x = n < b ? m - a - 1 : m - a;
    printf("%d.%d.%d", x, y, z);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个大番茄z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值