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

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

欢迎大家初步脱离麻瓜世界:

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

结尾无空行


我分了三种情况:


1.P<A

2.P=A

3.P>A

那么详情请看代码:


C语言:


#include <stdio.h>
int main() {
  int g1, s1, k1; //P应付的钱
  int g2, s2, k2; //A实付的钱
  int g, s, k; //找零
  scanf("%d.%d.%d %d.%d.%d", &g1, &s1, &k1, &g2, &s2, &k2);
  //1.P<A
  if ((g2 > g1) || (g2 == g1 && s2 > s1) || (g1 == g2 && s1 == s2 && k2 > k1)) {
    k = k2 - k1;
    if (k < 0) {
      k += 29;
      s2 -= 1;
    }
    s = s2 - s1;
    if (s < 0) {
      s += 17;
      g2 -= 1;
    }
    g = g2 - g1;
    printf("%d.%d.%d", g, s, k);
  }
  //2.P=A
  else if (g1 == g2 && s1 == s2 && k1 == k2) {
    printf("0.0.0");
  }
  //3.P>A
  else {
    k = k1 - k2;
    if (k < 0) {
      k += 29;
      s1 -= 1;
    }
    s = s1 - s2;
    if (s < 0) {
      s += 17;
      g1 -= 1;
    }
    g = g1 - g2;
    printf("-%d.%d.%d", g, s, k);
  }
  return 0;
}

C++:


#include <iostream>
using namespace std;
int main() {
  int g1, s1, k1; //P应付的钱
  int g2, s2, k2; //A实付的钱
  int g, s, k; //找零
  scanf("%d.%d.%d %d.%d.%d", &g1, &s1, &k1, &g2, &s2, &k2);
  //1.P<A
  if ((g2 > g1) || (g2 == g1 && s2 > s1) || (g1 == g2 && s1 == s2 && k2 > k1)) {
    k = k2 - k1;
    if (k < 0) {
      k += 29;
      s2 -= 1;
    }
    s = s2 - s1;
    if (s < 0) {
      s += 17;
      g2 -= 1;
    }
    g = g2 - g1;
    cout << g << "." << s << "." << k;
  }
  //2.P=A
  else if (g1 == g2 && s1 == s2 && k1 == k2) {
    cout << "0.0.0";
  }
  //3.P>A
  else {
    k = k1 - k2;
    if (k < 0) {
      k += 29;
      s1 -= 1;
    }
    s = s1 - s2;
    if (s < 0) {
      s += 17;
      g1 -= 1;
    }
    g = g1 - g2;
    cout << "-" << g << "." << s << "." << k;
  }
  return 0;
}

OK,恭喜大家成功脱离麻瓜世界。

相关文章
|
6月前
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
6月前
1073 多选题常见计分法 (20 分)
1073 多选题常见计分法 (20 分)
wustojc2013分糖果
wustojc2013分糖果
44 0
wustojc2013分糖果
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
83 0
(二分)1227. 分巧克力
(二分)1227. 分巧克力
80 0
|
C++
分糖果(C++)
Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。医生建议 Alice 要少摄入糖分,只吃掉她所有糖的。枚糖的情况下,可以吃到糖的 最多 种类数。,返回: Alice 在仅吃掉。给你一个长度为 n 的整数数组。
136 0
|
测试技术
PAT乙级1002写出这个数(20分)
PAT乙级1002写出这个数(20分)
104 0
|
人工智能
PAT乙级1007.素数对猜想(20分)
PAT乙级1007.素数对猜想(20分)
100 0
|
人工智能 BI
L3-001 凑零钱 (30 分)
L3-001 凑零钱 (30 分)
159 0