PTA乙级1037

1037

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

输入格式:
输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用 1 个空格分隔。这里 Galleon 是 [0, 10^
​7
​​ ] 区间内的整数,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

思路:刚开始的思路就是直接分离出三个数先逐个判断情况然后再逐个比较大小,写起来代码臃肿容易出错,看了别人的思路先把判断正负的方法另外写出来用boolean来判断,然后调用这个方法在进行判断那边为减数。

代码:


package test1;

import javax.print.DocFlavor;
import java.util.Scanner;

public class PTA1037 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String[] P=in.nextLine().split("\\s+");
        String[] a=P[0].split("\\.");
        String[] b=P[1].split("\\.");
        int i,o,p;
        int a0= Integer.parseInt(a[0]);
        int a1= Integer.parseInt(a[1]);
        int a2= Integer.parseInt(a[2]);
        int b0=Integer.parseInt(b[0]);
        int b1=Integer.parseInt(b[1]);
        int b2=Integer.parseInt(b[2]);
        if(bj(a,b)){
            if(b2>=a2){
                p=b2-a2;
            }else{
                p=b2+29-a2;
                b1--;
            }
            if(b1>=a1){
                o=b1-a1;
            }else {
                o=b1+17-a1;
                b0--;
            }
            i=b0-a0;
            System.out.printf("%d.%d.%d\n",i,o,p);
        }else {
            if(a2>=b2){
                p=a2-b2;
            }else {
                p=a2+29-b2;
                a1--;
            }
            if(a1>=b1){
                o=a1-b1;
            }else {
                o=a1+17-b1;
                a0--;
            }
            i=a0-b0;
            System.out.printf("-%d.%d.%d\n",i,o,p);
        }

    }
    private static boolean bj(String[] m, String[] n){
        int m1=Integer.parseInt(m[0]);
        int m2=Integer.parseIntjava(m[1]);
        int m3=Integer.parseInt(m[2]);
        int n1=Integer.parseInt(n[0]);
        int n2=Integer.parseInt(n[1]);
        int n3=Integer.parseInt(n[2]);
        if(m1>n1){
            return false;
        }else if(m1==n1){
            if(m2>n2){
                return false;
            }else if(m2==n2){
                if(m3>n3){
                    return false;
                }else return true;
            }else return true;
        }else return true;
    }
}

运行结果:
18.6.28 11.15.25
-6.8.3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值