题目链接:1037 在霍格沃茨找零钱 (20 point(s))

题目描述

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(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

10000000.16.28 10000000.16.27

输出样例 2

-0.0.1

Java代码

/**********************************************************************************
Submit Time Status Score Problem Compiler Run Time User
7/26/2019, 20:01:14 Accepted 20 1037 Java (openjdk) 74 ms wowpH
**********************************************************************************/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException; public class Main {
private static int[] P = new int[3]; // 应付的价钱P
private static int[] A = new int[3]; // 实付的钱A
private static int galleon, sickle, knut; // 应该被找零的钱
private static boolean enough = true; // 钱足够 private static void change(int[] P, int[] A) { // 找零
if (A[2] < P[2]) { // Knut币不够
A[1] -= 1; // 借一张Sickle币
A[2] += 29; // 兑换成29张Knut币
}
knut = A[2] - P[2]; // 找零的Knut币
if (A[1] < P[1]) { // Sickle币不够
A[0] -= 1; // 借一张Galleon币
A[1] += 17; // 兑换成17张Sickle币
}
sickle = A[1] - P[1]; // 找零的Sickle币
galleon = A[0] - P[0]; // 找零的Galleon币
} public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split("\\s|\\."); // 分割成6部分
for (int i = 0; i < 3; ++i) {
P[i] = Integer.parseInt(str[i]); // 应付的钱
}
for (int i = 3; i < 6; ++i) {
A[i - 3] = Integer.parseInt(str[i]); // 实付的钱
}
if (A[0] > P[0]) { // Galleon币足够
change(P, A);
} else if (A[0] < P[0]) { // Galleon不够
enough = false;
change(A, P);
} else if (A[1] > P[1]) { // Galleon币刚好,Sickle币足够
change(P, A);
} else if (A[1] < P[1]) { // Galleon币刚好,Sickle币不够
enough = false;
change(A, P);
} else if (A[2] > P[2]) { // Galleon币和Sickle币刚好,Knut币足够
change(P, A);
} else if (A[2] < P[2]) { // Galleon币和Sickle币刚好,Knut币不够
enough = false;
change(A, P);
}
if (false == enough) {
System.out.print("-"); // 钱不够,输出负号
}
System.out.println(galleon + "." + sickle + "." + knut);
}
}

最新文章

  1. 定义类型uint8_t,uint32_t
  2. 如何配置pl/sql (本地客户端)连接远程oracle服务器
  3. Excel公式错误提示啥意思?
  4. POJ 1113 - Wall 凸包
  5. 【转载】如何在FPGA设计环境中添加加时序约束
  6. VC++制作DLL具体解释
  7. js判断是否为手机浏览器
  8. poj 1936 All in All(水题)
  9. Codeforces Round #380 (Div. 2)D. Sea Battle
  10. R语言︱list用法、批量读取、写出数据时的用法
  11. Linux系统数据共享-NFS服务
  12. Apache Shiro 快速入门教程,shiro 基础教程
  13. ETH跌破400美元大关 一场收割全球的计划完成闭环
  14. SQL-8 找出所有员工当前(to_date=&#39;9999-01-01&#39;)具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
  15. ionic 2.x 3.x input触发调用键盘搜索及事件
  16. python学习之老男孩python全栈第九期_day012知识点总结
  17. Redis学习笔记10--Redis主从复制
  18. Connecting Vertices CodeForces - 888F (图论,计数)
  19. 地图经纬度坐标与屏幕坐标的转换(android版)
  20. 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展

热门文章

  1. 【转】JVM类装载机制的解析,热更新的探讨(二)
  2. C传递参数给main函数
  3. ArcGIS Python人门到精通目录基于ArcGIS10.2,100以上案例15章42个视频806分钟,51GIS网站上线
  4. 关于微信手机端IOS系统中input输入框无法输入的问题
  5. centos下安装ffmpeg加上fdk-aac的支持
  6. CentOS7搭建时间服务器-chrony
  7. 从0开始学爬虫7之BeautifulSoup模块的简单介绍
  8. Win10+Ubuntu18.04安装双系统
  9. 改进初学者的PID-手自动切换
  10. 【esp8266】技术汇总帖