PAT乙级 在霍格沃茨找零钱

8 篇文章 0 订阅
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string>
#include <string.h>
#include <math.h>
#include <vector>
#include <queue>
#include <stack>

using namespace std;

const int Max = 1010;
const long long MaxSize = 10100100;

char s1[Max], s2[Max];
char *s3[4];
char *tokens = ".";

typedef struct {
    long long g;
    long long s;
    long long k;
}Money;

Money mo[3];

void print(int flagc) {
    if (flagc == 1) {
        printf("-");
        printf("%lld.%lld.%lld", mo[2].g, mo[2].s, mo[2].k);
    }
    else {
        printf("%lld.%lld.%lld", mo[2].g, mo[2].s, mo[2].k);
    }
    printf("\n");
    return;
}

int main()
{
//  freopen("Text.txt", "r", stdin);
    while (scanf("%s %s",s1,s2)!=EOF) {
        char *token;
        int i = 0;
        token = strtok(s1, tokens);
        s3[0] = token;
        do {
            token = strtok(NULL, tokens);
            s3[++i] = token;
        } while (token);
        mo[0].g = stoll(s3[0]);
        mo[0].s = stoll(s3[1]);
        mo[0].k = stoll(s3[2]);
        char *token2;
        i = 0;
        token2 = strtok(s2, tokens);
        s3[0] = token2;
        while(token2){
            token2 = strtok(NULL, tokens);
            s3[++i] = token2;
        } 
        mo[1].g = stoll(s3[0]);
        mo[1].s = stoll(s3[1]);
        mo[1].k = stoll(s3[2]);
        mo[2].g = mo[1].g - mo[0].g;
        mo[2].s = mo[1].s - mo[0].s;
        mo[2].k = mo[1].k - mo[0].k;
        int flag = 0;
        if (mo[2].g > 0) {
            if (mo[2].k < 0) {
                mo[2].s--;
                mo[2].k = 29 + mo[2].k;
            }
            if (mo[2].s < 0) {
                mo[2].g--;
                mo[2].s = mo[2].s + 17;
            }
        }
        else if (mo[2].g == 0) {/* else if 相比 if if 结构的特点 :
                                这里用了else if结构,如果在上一个if中对mo[2].g造成改变则在这个else if不会受到影响
                                如果是if if 结构则在上一个if对下一个if的判断条件造成改变,下一个if会收到影响*/
            if (mo[2].s > 0) {
                if (mo[2].k < 0) {
                    mo[2].s--;
                    mo[2].k = 29 + mo[2].k;
                }
            }
            else if (mo[2].s == 0) {
                if (mo[2].k < 0) {
                    flag = 1;
                    mo[2].g = mo[0].g - mo[1].g;
                    mo[2].s = mo[0].s - mo[1].s;
                    mo[2].k = mo[0].k - mo[1].k;
                    if (mo[2].k < 0) {
                        mo[2].s--;
                        mo[2].k = 29 + mo[2].k;
                    }
                    if (mo[2].s < 0) {
                        mo[2].g--;
                        mo[2].s = mo[2].s + 17;
                    }
                }
            }
            else {
                flag = 1;
                mo[2].g = mo[0].g - mo[1].g;
                mo[2].s = mo[0].s - mo[1].s;
                mo[2].k = mo[0].k - mo[1].k;
                if (mo[2].k < 0) {
                    mo[2].s--;
                    mo[2].k = 29 + mo[2].k;
                }
                if (mo[2].s < 0) {
                    mo[2].g--;
                    mo[2].s = mo[2].s + 17;
                }
            }
        }
        else {
            flag = 1;
            mo[2].g = mo[0].g - mo[1].g;
            mo[2].s = mo[0].s - mo[1].s;
            mo[2].k = mo[0].k - mo[1].k;
            if (mo[2].k < 0) {
                mo[2].s--;
                mo[2].k = 29 + mo[2].k;
            }
            if (mo[2].s < 0) {
                mo[2].g--;
                mo[2].s = mo[2].s + 17;
            }
        }
        print(flag);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值