B1ue1nWh1te

不畏将来,不念过往。

[2021夏季学期编程训练题四]解题思路及参考代码

2 条评论 实验 Python C++ 算法 B1ue1nWh1te

更新日志

[2021年9月5日] 更新了难度1和2的题解。

[2021年9月14日] 更新了难度3和4的题解,动态规划的题目借用CSDN上的一个优秀博主(Karltan)的代码,学习了。

前言

文章内容为作者个人学习心得,解题思路及参考代码不一定是最优的,如发现有不正确的地方或更优的解法,欢迎批评指正或讨论交流,联系方式可以在页面下方找到。

1.在霍格沃茨找零钱

1

temp = input().split()
v1, v2 = temp[0].split("."), temp[1].split(".")
for i in range(3):
    v1[i] = int(v1[i])
    v2[i] = int(v2[i])
s1 = (v1[0] * 17 + v1[1]) * 29 + v1[2]
s2 = (v2[0] * 17 + v2[1]) * 29 + v2[2]
c = s2 - s1
ac = abs(c)
g = ac // (17 * 29)
s = (ac - g * 17 * 29) // 29
k = ac - g * 17 * 29 - s * 29
if c < 0:
    print("-{}.{}.{}".format(g, s, k))
else:
    print("{}.{}.{}".format(g, s, k))


[2021夏季学期编程训练题三]解题思路及参考代码

3 条评论 实验 Python C++ 算法 B1ue1nWh1te

更新日志

[2021年7月26日] 更新了难度1和2的题解。

[2021年9月5日] 更新了难度3和4的题解(部分题目是从CSDN搬运的,因为这些题目表面复杂实际简单,写出来很费时间却无助于提升)。

[2021年9月5日] 训练四题解已更新,点此<传送门>进入。

前言

文章内容为作者个人学习心得,解题思路及参考代码不一定是最优的,如发现有不正确的地方或更优的解法,欢迎批评指正或讨论交流,联系方式可以在页面下方找到。

1.部分A+B

1

A, DA, B, DB = input().split()  #读入数据(字符串型)
PA = DA*A.count(DA)     #统计A中出现DA的次数,并将DA重复这么多次,得到PA
PB = DB*B.count(DB)     #统计B中出现DB的次数,并将DB重复这么多次,得到PB
PA = 0 if PA == '' else int(PA)     #若DA在A中一次都没有出现,则PA为0,否则转为整型
PB = 0 if PB == '' else int(PB)     #若DB在B中一次都没有出现,则PB为0,否则转为整型
print(PA + PB)      #输出PA与PB的和


[2021夏季学期编程训练题二]解题思路及参考代码

4 条评论 实验 Python C++ 算法 B1ue1nWh1te

更新日志

[2021年7月9日] 开始更新训练二题解,今天先上难度1的题,正好题目简单,可以让大家领会一下Python的优雅。之后的题目也都会有Python版本(因为太好用了,毕竟是小训练问题不大),同时考虑到兼顾的问题,也会向朋友们征集C++版本的代码进行发布。如果想要某题的C++代码也可以在下方评论区留言,我有时间就手敲。

[2021年7月11日] 更新了难度2的题目,之后参考代码都是Python的,无论有无基础,认真看都是能看懂的。

[2021年7月14日] 已更新所有题目的题解。

[2021年9月5日] 训练三题解已更新,点此<传送门>进入。

本文只有第7、12、21题使用了C++编写,若需其他题目的C++思路,点击这里查看森大的文章。

前言

文章内容为作者个人学习心得,解题思路及参考代码不一定是最优的,如发现有不正确的地方或更优的解法,欢迎批评指正或讨论交流,联系方式可以在页面下方找到。

1.字符串反转2

1

思路: 由于数据的条数不明,故使用while循环。处理方式就是将字符串以空格符进行分割得到由每个单词组成的列表,之后对列表进行逆序操作,最后用空格符将单词连成句子并输出。

try:
    while True:  # 持续循环
        sentence = input()
        temp = sentence.split(" ")  # 以空格符分割字符串得到单词列表
        temp.reverse()  # 将单词列表逆序
        sentence = " ".join(temp)  # 拼接成句子
        print(sentence)  # 输出逆序后的句子
except EOFError:  # 若已经到输入的结尾EOF则退出
    pass


[2021夏季学期编程训练题一]解题思路及参考代码

2 条评论 实验 Python C++ 算法 B1ue1nWh1te

更新日志

[2021年7月5日] 做了难度为1和2的所有题目,额外加一道难度为3的第2题(今天均为C++解法 明天难度3和4尝试用Python来写)

[2021年7月6日] 目前做了第6和21题(C++写法),第3、5、7题(Python写法),题目是做一部分更新一部分的。评论区已经打开,如果你有好的建议和想法欢迎留言。

[2021年7月7日] 今天更新了第4、9、10题,还剩第8题明天用Python解。

[2021年7月8日] 第8题详解已更新,C++写法。(Python写法读bin文件有点复杂,就改用C++了)至此,训练一所有题目已经AC。

[2021年7月9日] 训练二题解已更新,点此<传送门>进入。

前言

文章内容为作者个人学习心得,解题思路及参考代码不一定是最优的,如发现有不正确的地方或更优的解法,欢迎批评指正或讨论交流。

1.众数

1

思路:由于输入的数据是比较规范的,所以可以通过判断新输入的数和上一个输入的数是否相同来入手,如果相同则计数器加1,如果不同则代表上一个数已经统计完毕,将数和计数值存入两个数组中,它们的下标相互对应,清空计数器并对下一个数进行同样的操作。计数完成后遍历计数数组寻找最先出现的最大众数的下标,输出数字数组中这一下标位置存储的数即可。


关于Base64隐写的简要分析

0 条评论 技术 Base64 CTF B1ue1nWh1te

前言

最近在入门CTF时遇见了一道Misc题是关于Base64隐写的(文章后半部分会提到),刷新了我对Base64的认知,因此写下这篇文章来介绍一下关于Base64隐写的知识。

在介绍Base64隐写之前,我们得先了解Base64编码的原理。

Base64编码

Base64编码就是用64个字符(2的6次方),对二进制数据进行编码的方式。这64个字符包括大写字母(A-Z)、小写字母(a-z)、数字(0-9)以及+和/这两个符号。由于Base64编码只用到了64个字符,所以使用6个二进制位就可以把所有的字符表示出来,于是原来的1个字节对应8个二进制位在Base64编码中就变成了1个字节对应6个二进制位。

每个字符对应的数值见下表:
base64编码表