PAT 乙级 1037 在霍格沃茨找零钱 (C语言)

2023-11-19

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

输入样例 2:
14.1.28 10.16.27

输出样例 2:
-3.2.1
分析与总结:

  1. 定义结构体存储gallon、sickle、knut
  2. GetChange函数用于算出找的钱,传入的两个参数,给的钱大于应付的钱,题目中说明了有钱不够的情况,故传入参数前应判断够不够,不够,则需调换两个参数的位置,输出时添加-即可。详细见代码

程序:

#include <stdio.h>
#define KUNTtoSICKLE 29
#define SICKLEtoGALLON 17
typedef struct{
    int gallon;
    int sickle;
    int knut;
}Money;
Money GetPayment();
Money GetChange(Money P, Money A);

int main()
{
    Money P, A, change;
    int totalP, totalA, flag;
    P = GetPayment();
    A = GetPayment();
    
    totalP = P.gallon * SICKLEtoGALLON * KUNTtoSICKLE + P.sickle * KUNTtoSICKLE + P.knut;
    totalA = A.gallon * SICKLEtoGALLON * KUNTtoSICKLE + P.sickle * KUNTtoSICKLE + P.knut;
    flag = (totalA >= totalP)? 1 : 0;
    if(flag == 1) {
        change = GetChange(P, A);
        printf("%d.%d.%d", change.gallon, change.sickle, change.knut);
    }
    else {
        change = GetChange(A, P);
        printf("%d.%d.%d", -change.gallon, change.sickle, change.knut);
    }
    
    return 0;
}

Money GetPayment()
{
    Money P = {0, 0, 0};
    int c;

    while((c = getchar()) != '.')
        P.gallon = P.gallon * 10 + c - '0';
    while((c = getchar()) != '.')
        P.sickle = P.sickle * 10 + c - '0';
    while((c = getchar()) != ' ' && c != '\n')
        P.knut = P.knut * 10 + c - '0';
    
    return P;
}
Money GetChange(Money P, Money A)
{
    Money change;
    if(A.knut >= P.knut){
        change.knut = A.knut - P.knut;
    }
    else{
        A.sickle--;
        change.knut = A.knut + KUNTtoSICKLE - P.knut;
    }

    if(A.sickle >= P.sickle){
        change.sickle = A.sickle - P.sickle;
    }
    else{
        A.gallon--;
        change.sickle = A.sickle + SICKLEtoGALLON - P.sickle;
    }

    change.gallon = A.gallon - P.gallon;
    return change;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT 乙级 1037 在霍格沃茨找零钱 (C语言) 的相关文章

  • PAT(Basic level)Practice 1012 数字分类 题解

    1012 数字分类 20分 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A 1 A 1 A1 能被 5 整除的数字中所有偶数的和 A
  • 1033 旧键盘打字 (20 分)*输入有可能是空串

    旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大写给出 每
  • PAT 1072 开学寄语(20)(代码+思路)

    1072 开学寄语 20 分 下图是上海某校的新学期开学寄语 天将降大任于斯人也 必先删其微博 卸其 QQ 封其电脑 夺其手机 收其 ipad 断其 wifi 使其百无聊赖 然后 净面 理发 整衣 然后思过 读书 锻炼 明智 开悟 精进 而
  • PAT乙级 1110 区块反转 (25 分) C++

    1110 区块反转 25 分 给定一个单链表 L 我们将每 K 个结点看成一个区块 链表最后若不足 K 个结点 也看成一个区块 请编写程序将 L 中所有区块的链接反转 例如 给定 L 为 1 2 3 4 5 6 7 8 K 为 3 则输出应
  • PAT乙级1032题解

    题目详情 1032 挖掘机技术哪家强 20 分 为了用事实说明挖掘机技术到底哪家强 PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1 行给出不超过 10的 5次方的正整数 N 即参赛人数
  • 1001 害死人不偿命的(3n+1)猜想 (15 分)

    卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡拉兹在 1950 年的世界数学家大会上公布了这个猜想 传说当时
  • PAT 乙级 1035 插入与归并 (C语言)

    题目 根据维基百科的定义 插入排序是迭代算法 逐一获得输入数据 逐步产生有序的输出序列 每步迭代中 算法从输入序列中取出一元素 将之插入有序序列中正确的位置 如此迭代直到全部元素有序 归并排序进行如下迭代操作 首先将原始序列看成 N 个只包
  • PAT乙级 1001 害死人不偿命的(3n+1)猜想 (15分)

    PAT乙级 1001 害死人不偿命的 3n 1 猜想 15分 卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡
  • PAT Basic Level 1045 快速排序(思维)

    题目链接 点击查看 题目描述 著名的快速排序算法里有一个经典的划分过程 我们通常采用某种方法取一个元素作为主元 通过交换 把比主元小的元素放到它的左边 比主元大的元素放到它的右边 给定划分后的 N 个互不相同的正整数的排列 请问有多少个元素
  • PAT B1072 开学寄语

    算法思想 用数组标记应要查缴的物品mark 物品编号 1 在输入学生信息的同时判断该物品是否要查缴 因格式问题用了另一个数组保存该学生要查缴的物品编码 最后再输出该学生的名字和查缴物品编号 后来看了柳神的代码 不用这么麻烦 直接在输出前加括
  • PAT乙级 1010 一元多项式求导 (25分)

    1010 一元多项式求导 25分 设计函数求一元多项式的导数 注 x n n为整数 的一阶导数为nxn 1 输入格式 以指数递降方式输入多项式非零项系数和指数 绝对值均为不超过 1000 的整数 数字间以空格分隔 输出格式 以与输入相同的格
  • (c语言)PAT 乙级 1010 一元多项式求导 (25分)

    设计函数求一元多项式的导数 注 x的n次方 n为整数 的一阶导数为n乘x的n 1次方 输入格式 以指数递降方式输入多项式非零项系数和指数 绝对值均为不超过 1000 的整数 数字间以空格分隔 输出格式 以与输入相同的格式输出导数多项式非零项
  • PAT B1016 部分A+B (15 分)(C语言实现)

    PAT B1016 部分A B 15 分 C语言实现 问题描述 正整数 A 的 D A 为 1 位整数 部分 定义为由 A 中所有 D A 组成的新整数 P A 例如 给定 A 3862767 D A 6 则 A 的 6 部分 P A 是
  • Python3 爬取PAT个人乙级题所有答案代码

    Python3 爬取PAT个人乙级题所有答案 进入PAT乙级题题目页面 下面是链接 https pintia cn problem sets 994805260223102976 problems type 7 点开两个题目 观察两个链接有
  • PAT乙级1052 卖个萌 (20 分)测试点123

    https pintia cn problem sets 994805260223102976 problems 994805273883951104 测试点0 Are you kidding me 中 为转义字符 要用双 表示 测试点1
  • 1001. 害死⼈不偿命的(3n+1)猜想(15分)

    害死 不偿命的 3n 1 猜想 15分 卡拉兹 Callatz 猜想 对任何 个 然数n 如果它是偶数 那么把它砍掉 半 如果它是奇数 那么把 3n 1 砍掉 半 这 样 直反复砍下去 最后 定在某 步得到n 1 卡拉兹在1950年的世界数
  • PAT乙级 1029旧键盘 python

    题目 思路 将输入与输出逐位对比 将不相等的记录下来即可 代码 input input print input bad key 记录坏掉的键盘 upper 将所有小写字符转为大写 lower 将所有大写转为小写 print position
  • PAT 1011 A+B 和 C

    给定区间 2 31 2 31 内的 3 个整数 A B 和 C 请判断 A B 是否大于 C 注意本题数字的范围 是 2 31 2 31 因此要用long long 类型 刚开始用了int 类型 一直提示有错误 注意int 32位 可以包括
  • PAT B 1055 集体照(C语言)

    一 题目 拍集体照时队形很重要 这里对给定的 N 个人 K 排的队形设计排队规则如下 每排人数为 N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为 m 2 1 其中 m 为该排
  • 1055. 集体照 (25) PAT乙级真题

    1055 集体照 25 拍集体照时队形很重要 这里对给定的N个人K排的队形设计排队规则如下 每排人数为N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为m 2 1 其中m为该排人

随机推荐