IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 1037 在霍格沃茨找零钱 (20 分) -> 正文阅读

[数据结构与算法]1037 在霍格沃茨找零钱 (20 分)

1037

题解

第一次跟柳神的代码思路接近,然鹅,人家写的也太简洁了吧orz
另外,刚开始交的时候错了几个测试点。原因是没有考虑到某一位的数字相等时,也要做减法。
我的这个思考纰漏正好是从柳神的反面来做的,柳神用的是<,我用的是>=。真是简洁到各个细节Orz

#include <iostream>

using namespace std;

struct monkey{
    long long int Galleon;
    int Sickle;
    int Knut;
}a,b,c;
int main()
{
    bool flag=false;
    scanf("%lld.%d.%d %lld.%d.%d",&b.Galleon,&b.Sickle,&b.Knut,&a.Galleon,&a.Sickle,&a.Knut);
    if(a.Galleon<b.Galleon||(a.Galleon==b.Galleon&&a.Sickle<b.Sickle)||(a.Galleon==b.Galleon&&a.Sickle==b.Sickle&&a.Knut<b.Knut))
    {
        flag=true;
        monkey tmp;
        tmp.Galleon=a.Galleon;tmp.Sickle=a.Sickle;tmp.Knut=a.Knut;
        a.Galleon=b.Galleon;a.Sickle=b.Sickle;a.Knut=b.Knut;
        b.Galleon=tmp.Galleon;b.Sickle=tmp.Sickle;b.Knut=tmp.Knut;
    }
    //printf("%lld.%d.%d\n",a.Galleon,a.Sickle,a.Knut);
    //printf("%lld.%d.%d\n",b.Galleon,b.Sickle,b.Knut);
    if(a.Knut>=b.Knut)
    {
        c.Knut=a.Knut-b.Knut;
        //考虑相等
        if(a.Sickle>=b.Sickle)
            c.Sickle=a.Sickle-b.Sickle;
        else
        {
            a.Sickle+=17;
            a.Galleon-=1;
            c.Sickle=a.Sickle-b.Sickle;
        }
        //考虑相等
        if(a.Galleon>=b.Galleon)
            c.Galleon=a.Galleon-b.Galleon;
    }else
    {
        a.Knut+=29;
        a.Sickle-=1;
        c.Knut=a.Knut-b.Knut;
        if(a.Sickle>=b.Sickle)
            c.Sickle=a.Sickle-b.Sickle;
        else
        {
            a.Sickle+=17;
            a.Galleon-=1;
            c.Sickle=a.Sickle-b.Sickle;
        }
        if(a.Galleon>=b.Galleon)
            c.Galleon=a.Galleon-b.Galleon;
    }
    if(!flag)
        printf("%lld.%d.%d\n",c.Galleon,c.Sickle,c.Knut);
    else
        printf("-%lld.%d.%d\n",c.Galleon,c.Sickle,c.Knut);
    return 0;
}

柳神代码

#include <iostream>
using namespace std;
int main() {
    int a, b ,c, m, n, t, x, y, z;
    scanf("%d.%d.%d %d.%d.%d",&a, &b, &c, &m, &n, &t);
    if (a > m || (a == m && b > n) || (a == m && b == n && c > t)) {
        swap(a, m); swap(b, n); swap(c, t);
        printf("-");        
    }
    z = t < c ? t - c + 29 : t - c;
    n = t < c ? n - 1 : n;
    y = n < b ? n - b + 17 : n - b;
    x = n < b ? m - a - 1 : m - a;
    printf("%d.%d.%d", x, y, z);
    return 0;
}

思维量小的一种做法

将各位统一化为某一位后再进行相减,之后再格式化为 Galleon.Sickle.Knut的形式。比如按它们三者的关系将Galleon和Sickle都转化为Knut,注意此时如果数据过大要将knut定义为long long型,本题没超。

#include<iostream>
using namespace std;
int main(){
	int a,b,c,d,e,f;
	scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&d,&e,&f);
	int count=d*17*29+e*29+f-a*17*29-b*29-c;
	if(count<0){
		cout<<"-";
		count=-count;
	} 
	cout<<count/29/17<<"."<<count/29%17<<"."<<count%29;
	return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:27:44  更:2021-08-25 12:30:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:13:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码