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,恭喜大家成功脱离麻瓜世界。

相关文章
|
10天前
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
2月前
|
算法 测试技术
联想算法题-小朋友分糖果
联想算法题-小朋友分糖果
20 0
天梯赛真题——7-6 老板的作息表(25 分)
新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了? 本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。
662 0
天梯赛真题——7-6 老板的作息表(25 分)
|
12月前
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
65 0
【每日一道智力题】之海盗分金币(上)
【每日一道智力题】之海盗分金币(上)
132 0
PTA 1077 互评成绩计算 (20 分)
在浙大的计算机专业课中,经常有互评分组报告这个环节。
136 0
|
算法 C语言
假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。
(2)当n为奇数时,将前后两部分,即1…n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。:因为30位偶数,所以至少要被分一次,然后成为奇数之后,那个假币就是奇数的中位数,所以只需要2次。若输入的硬币数为30,则最少的比较次数为(2),最多的比价次数为(4)。
439 0
|
Shell
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
472 0
|
人工智能
PAT乙级1007.素数对猜想(20分)
PAT乙级1007.素数对猜想(20分)
78 0
h0131. 钞票 (15 分)
h0131. 钞票 (15 分)
85 0