
算法零基础
孙于程
这个作者很懒,什么都没留下…
展开
-
1200: 8002 越多越好
你的任务就是找一个最大的子序列{Y1, Y2, ... , Ym} ,对于每对 (Yi, Yj)要求满足Yi + Yj <= L (1 ≤ i < j ≤ m), 而且同时满足Yi <= L (1 ≤ i ≤ m )。每个测试数据占一行,包括5个整数: n, L, A, B 和mod. (1 ≤ n ≤ 2 * 107, 1 ≤ L ≤ 2 * 109, 1 ≤ A, B, mod ≤ 109)现在给定n,L,A,B和mod,你的任务就是找出上述最大的m值。错的地方是x<=l/2;从哪几方面来判断呢?原创 2023-06-15 12:31:25 · 103 阅读 · 0 评论 -
1029: 1029 素数的和
输入文件有很多行,每行包含一些正整数(零或负数表示结束),要求统计其中的素数的和。学习的主要是输入的技巧。原创 2023-06-14 14:04:44 · 147 阅读 · 0 评论 -
1202: 8004 一个数学好奇号
给定两个整数n和m,统计这样的整数对的个数(a,b),满足0 < a < b < n 并且 (a2+b2 +m)/(a * b) 也是整数。第一行是个整数N,然后是一个空行,接下来是N组输入数据块,每个数据块之间有一个空行隔开。其实看了看,错的是真不冤啊,就是从一开始就没读明白,不是输入了一个一吗,为啥有四组啊,,,,然后完了a和b的大小关系也没看明白。组与组之间用空行隔开。给定你输入数据的块数,每个测试数据包括两个整数n和m,n=m=0表示输入结束,假定0 < n <= 100。破烂的破烂的错误的代码。原创 2023-06-13 18:32:49 · 78 阅读 · 0 评论 -
完美立方—
编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d) ,使得a3 = b3 + c3 + d3,其中1 < a, b, c, d ≤ N。每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。其实这个代码 卡了一小会 就是在输出的时候,开始的时候没有考虑到bcd顺序输出。因为这个计算的是b原创 2023-06-13 17:53:47 · 144 阅读 · 0 评论 -
1212: 8103 生理周期
对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。原创 2023-06-13 17:42:53 · 178 阅读 · 0 评论 -
1211: 8102 开关
输入文件中有多组测试数据,每行一组。首先是一个整数N(1原创 2023-06-13 16:18:16 · 237 阅读 · 0 评论 -
问题 G: 2027 模拟测试2(大整数求和)
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。有多组样例,每组样例有两行,每行是一个不超过200位的非负整数,没有多余的前导0。备用python和java程序 节省时间。求两个不超过200 位的非负整数的和。原创 2023-06-12 11:09:19 · 338 阅读 · 0 评论 -
问题 C: 2023 模拟测试2(逆序数)
对于给定的一个整数n,总是可以把它逆序过来变成另外一个整数,请编程实现。第一个是正整数M,表示有M个测试数据,每行为一个整数n。输出逆序后的整数,不能有多余的前导0。思考下面程序的问题 并修改完善。原创 2023-06-12 11:07:59 · 207 阅读 · 0 评论 -
*问题 F: 2026 模拟测试2(三数之和)
有3个整数a1,a2,a3。已知0原创 2023-06-12 11:04:22 · 400 阅读 · 0 评论 -
x问题 E: 2025 模拟测试2(积极向上的小青蛇)
一只1英才长的小青蛇在一口深n英寸的井底。在休息的过程中,小青蛇又下滑了d英寸。在此,不足一分钟按一分钟计,并且假定只要在某次上爬过程中小青蛇的头部到达了井的顶部,那么小青蛇就完成任务了。每组占一行,为3个正整数n,u,d,其中n是井的深度,u是小青蛇每分钟上爬的距离,d是小青蛇在休息的过程中下滑的距离。假定d< u,n < 100。对输入文件中的每组测试数据,输出一个整数,表示小青蛇爬出井所需要的时间(分钟,不足1分钟按1分钟计算)。在这里要注意的是,小青蛇本身的长度是否需要加上。原创 2023-06-12 10:56:45 · 342 阅读 · 0 评论 -
问题 D: 2024 模拟测试2(日期更正器)
小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。有多行数据,每行一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。在一行中按标准格式“年年年年-月月” 将输入的信息整理输出。原创 2023-06-12 10:54:49 · 341 阅读 · 0 评论 -
问题 B: 2022 模拟测试2(念数字)
输出每行整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。输入有多行,每行一个整数,如:1234。原创 2023-06-12 10:55:38 · 331 阅读 · 0 评论 -
x问题 A: 2021 模拟测试2(A除以B)
在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。输入在第一行给出两个整数A和B(−100 ≤ A,B ≤ 100),数字间以空格分隔。给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。原创 2023-06-12 10:54:39 · 274 阅读 · 0 评论 -
进制转换 10-k m-10
【代码】进制转换 10-k m-10。原创 2023-06-11 12:13:01 · 87 阅读 · 0 评论 -
**1153: 5112确定进制
即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2* 130 = 54(10)。你的任务是写一段程序读入三个整数p、q和r,然后确定一个进制B(2原创 2023-06-11 11:54:07 · 104 阅读 · 0 评论 -
1151: 5102 Sky数
Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示1894,其四位数字之和也为22,啊哈,真是巧啊。但是要判断这样的数还是有点麻烦啊,那么现在请你帮忙来判断任何一个十进制的四位数,是不是Sky数吧。若n为Sky数,则输出“#n is a Sky Number.”,否则输出“#n is not a Sky Number.”。原创 2023-06-11 10:08:47 · 104 阅读 · 0 评论 -
十进制转化为十以下的任何进制数
使用的时候直接引用函数即可。原创 2023-06-11 09:25:57 · 63 阅读 · 0 评论 -
*****1112: 4004 开门人和关门人
例如,若要存储一个长度为3的字符串,字符数组应当至少分配4个字节的空间,前3个字节存储字符串内容,最后一个字节存储\0结束符。注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。但是不要过于焦虑,至少我们已经学会了这道题,也学会了一个新思路,也就是时间也是可以用字符串来比较的。这个题所有的都采用的是字符串的比较,可以说是考察的知识点是非常简单的。经历一个半小时之后,没关系,正常的,别放弃!找到了一个正确的程序,现在让我们来分析一下它的思路叭。原创 2023-06-10 04:13:48 · 555 阅读 · 0 评论 -
1113: 4005 看和说
想出最优解之后再进行计算,就像这道题,他就是按顺序输出的,所以不需要计算总共的,只要算一个看一个就行。然后计算个数的话,就出现一次相同的就++,(这里要记得及时清零,避免累加的情况。(其实这样的代码量也是增加了的) 不如就记下新数字开始的位置和结束的位置,然后相减就是重复的个数,直接输出就好!例如,字符串“122344111”可以被描述为“1个1,两个2,1个3,2个4和3个1”。输入包括测试数据的组数,然后依次为相应的测试数据,每个数据占一行,不会超过1000位。对于每个测试数据,输出对应的字符串。原创 2023-06-10 01:53:28 · 102 阅读 · 0 评论 -
1123: 4102 气球升起来
外层循环枚举到当前输入的字符串为止,内层循环枚举之前所有的字符串,逐一比较是否有与当前输入的相同的字符串。对于每个字符串,我们需要遍历之前所有已经输入的字符串,找到是否存在相同的字符串,如果存在则将该字符串出现次数加1;否则说明是新的字符串,将该字符串出现次数设置为1即可。首先,题目的要求是统计每个字符串出现的次数,然后输出出现次数最多的那个字符串。因此,我们可以使用一个数组来存储每个字符串出现的次数,并记录出现次数最多的字符串。最后,遍历所有字符串的出现次数,找到出现次数最多的那个字符串并输出即可。原创 2023-06-10 01:00:15 · 273 阅读 · 0 评论 -
1124: 4103 All in All
输入文件包括多组测试数据,每组测试数据占一行,包括两个由ASCII码组成的字符串s和t,它们的长度都不超过100000。//这样的话,就只能往后找了,不能是乱序的,只能是有序的,因为是删除一些字符,而不是可以调整字符的顺序。一个一个比对,比对成功后,就只能比对后面的字符串,最后算总长度,如果总长度是和s的长度一致的,则正确的。即从t中删除一些字符,将剩余的字符连接起来,即可获得s。对于每个测试数据输出一行,如果s是t的子序列,则输出“Yes”,否则输出“No”。是子序列先后顺序的问题。原创 2023-06-10 01:00:10 · 115 阅读 · 0 评论 -
* 1100: 3113 肿瘤面积
在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。第一行有一个整数n,表示正方形图像的边长。其后n行每行有n个整数,取值为0或255。整数之间用一个空格隔开。已知n不大于1000。//边缘的肯定不可能是肿瘤内部的点 所以可以跳过第一行和最后一行和第一列和最后一列。输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。原创 2023-06-09 00:54:48 · 107 阅读 · 0 评论 -
1122: 4101 统计字符数
第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串,每组测试数据之间有一个空行,每行数据不超过1000个字符且非空。n行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。判断一个由a~z这26个字符组成的字符串中哪个字符出现的次数最多。经过好好cjy老师的指导的修正后的代码。1.max 和p重置的地方。主要改正了哪些地方呢。原创 2023-06-09 00:53:48 · 118 阅读 · 0 评论 -
1104: 3204 校门外的树木
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。原创 2023-06-08 21:07:06 · 118 阅读 · 0 评论 -
1101: 3201 A+B问题
测试输入包含若干测试数据,每个测试数据占一行,格式为A B K,相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。再就是 还是要注意 如果下一步要用到某个值,最好不要在某个值上进行变化。可以定义一个新的值去看变化的情况。这个题 没想到的点在于 要比对最后k位是否一样,其实可以用取余的办法,!对每个测试数据输出1行,即A+B的值或者是-1。原创 2023-06-08 17:11:50 · 150 阅读 · 0 评论 -
1099: 3112 纸牌
一张扑克牌可以放置在桌子的边缘,只要伸出桌子边缘的长度不超过整张牌长度的一半即可。n张牌叠起来放在桌子的边缘,其最长可伸出桌子边缘的长度为1/2+1/4+……+1/(2 * n),输入n,按照题目要求的格式输出n张牌可伸出桌子边缘的最大。对输入文件中的每个测试数据,首先输出牌的数目n,然后在输出n张牌最长可伸出桌子边缘的长度,保留小数点后3位有效数字,小数点前至少有一位数。在循环中,i *= 2的操作会导致循环变量i的值指数级增长,因此要使用另一个变量(例如j)来进行控制,不能直接修改循环变量;原创 2023-06-08 16:01:32 · 157 阅读 · 0 评论 -
问题 G: 2017 模拟测试1(统计不及格人数)
这个题出现的问题需要注意的是 刚开始的思路没有任何问题,确实不需要记录多个数据 ,只需要记录不及格的就可以,所以没有任何问题,是完全可以的。再就是注意一下输出的位置问题。有多组测试用例,每组第一行是正整数N(0 < N < 201),然后是N行数据,每行表示一个学生的学号和成绩,中间空格隔开。又到一年一度的期末考试了,老师最头痛的问题就是从一堆学生中统计不及格的人数,你快来帮忙吧。总是会出现各种奇奇怪怪的错误,就像这道题,我甚至忘了&每组测试用例输出不及格(成绩<60)人数。原创 2023-06-08 09:27:58 · 123 阅读 · 0 评论 -
问题 F: 2016 模拟测试1(非法日期)
每组输入给出判断,如果日期有效,则先输出该日期,然后输出true,无效则输出false,中间一个空格隔开。在填写各种日期时,用户经常会填错日期,要求你编程实现对日期有效性进行判断。输入有多组数据,每组一行,表示一个日期,格式为“2016.5.24”。样例检测一直是正确的,但是不清楚哪里是错误的。原创 2023-06-08 09:20:34 · 187 阅读 · 1 评论 -
问题 E: 2015 模拟测试1(区间求和)
输入第1行给出正整数N,是测试用例的个数。随后给出N组测试用例,每组占一行,顺序给出正整数a和b。a不大于b,其和也不会超过整数范围。给定一个正整数a和b,求其区间(包括a和b)内所有被3或5整除的数之和。对于每组测试用例,输出a和b之间能被3整除或能被5整除的所有数之和。无需多说,老师给的保命题。原创 2023-06-08 09:17:18 · 94 阅读 · 0 评论 -
问题 D: 2014 模拟测试1(A+B)
每组输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。这道题是老师已经讲过并做过的高精度计算用数组解决的问题,需要注意的是,前导0的处理。有多组数据,每组两行,每行是一个不超过200位的非负整数,没有多余的前导0。原创 2023-06-08 09:15:58 · 165 阅读 · 0 评论 -
问题 C: 2013 模拟测试1(个位数统计)
给定一个k位整数N,请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1和1个3。对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。通过对比正确的代码 和自己一开始写的错误的代码 应该发现一些问题 是思维上的 还是使用上的,争取达到最优解。输入有多个,每行包含1个测试用例,即一个不超过1000位的正整数N。原创 2023-06-08 09:14:35 · 120 阅读 · 0 评论 -
问题 B: 2012 模拟测试1( A+B和C)
对每组测试用例,如果A+B>C,在一行中输出“Case #X: true”。否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。输入第1行给出正整数T( T <= 10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。这道题应该是老师给的保命题。原创 2023-06-08 09:13:53 · 86 阅读 · 0 评论 -
问题 A: 2011 模拟测试1(成绩排名)
测试数据有多组,每组首先是一个正整数n(0 < n < 31),接下来是n行数据,每行数据代表一个学生的成绩,分部为学生的姓名、学号、成绩。其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。每组分两行输出成绩最高和成绩最低学生的姓名、学号和成绩,字符串间有1空格,两组之间用空行隔开。又到一年一度的期末考试了,老师最头痛的问题就是从一堆学生中找最高分和最低分,你快来帮忙吧。原创 2023-06-08 09:11:06 · 210 阅读 · 0 评论 -
1098 3111最小公倍数
这个题当时的问题在于,flag的指向意义不够明确,应该是flag=1时,就更新t的值,然后跳出循环。自己的思路是算出最大公约数 然后更新ab的值。原创 2023-06-06 12:40:15 · 63 阅读 · 0 评论 -
输入格式问题
每组数据包括一行,给出2到15个两两不同且小于10000的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。所以之后如果遇到这种会中途发生变化的,可以提前把不同的变量设好,然后检查,输出格式和原来的是否是对应的。虽然用的是输入一个数一个数这样的,但是通过精确的控制,确实非常简便。最后如果输出用的事d的话 会出现很多奇怪的问题。今晚重新复习做的两道题笑死了。这个的输入值得积累和学习。原创 2023-06-06 00:08:53 · 66 阅读 · 0 评论 -
1236 9201
每个乘积一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。输入有多组测试数据,每组有两行,每行是一个不超过200位的非负整数,没有多余的前导0。求两个不超过200位的非负整数的积。原创 2023-06-05 19:23:49 · 188 阅读 · 0 评论 -
1229 -9003
作为地球人的唯一代表,你被送到火星上向他们展示人类的智慧。幸运的是,你带上了笔记本电脑,这将帮助你快速完成这项任务。需要注意的是,火星人用的是20进制,因为他们有20个手指。比赛的任务是计算两个100位数的和,用时最少者获胜。的函数,它接收一个指向字符型数组的指针作为参数,然后将该数组中的字符内容进行反转。具体实现方法是通过交换开头和结尾的字符,并依次向中间靠拢,直到达到中点位置。火星数包括0~9,以及小写字母a~j,小写字母分别代表十进制中的10~19。输出每对数的和,每个和占一行。原创 2023-06-05 16:51:37 · 79 阅读 · 0 评论 -
1227 -9001
孩子们是这样学习多位数的加法:将两个加数右对齐,然后从右到左每次加一位。这种情况下经常会产生进位,即两位相加结果若大于等于10就向左进一位。对于孩子们来说,判断进位具有一定的挑战性。你的任务是:给定任意的两个加数,要求统计出进位的次数,以帮助教育者评估该加法的难度。对输入文件的每一行(除最后一行外),计算它们在相加时进位的次数并输出。按照输出样例的格式输出。小坑--注意1的时候 输出的是单数。其他情况是复数,要单独进行讨论。每一行是两个少于10位的无符号整数,最后一行为0 0,表示输入结束。原创 2023-06-05 16:22:06 · 94 阅读 · 0 评论 -
1231: 9005 N的阶乘
给定一个整数N(0 ≤ N ≤ 10000),要求计算N的阶乘。也算是不断给数组增加长度的一个过程//这样也许可以不用管先导零?①数组的初始化 直接赋值法/memset法。从上面的代码中,我们可以把这个拆分一下。对于每个N,输出N的阶乘,占一行。③ 最后要对carry进行处理。每个N占一行,直到文件尾。重要的 可重复利用的部分是。原创 2023-06-05 15:46:19 · 72 阅读 · 0 评论 -
1161: 6002 时间格式转换
对于日期的常用格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”,此次编程大赛的启动日期“2009/11/07”就是符合这种格式的一个日期,而北美所用的日期格式则为“月月/日日/年年年年”或”mm/dd/yyyy”,如将“2009/11/07”改成这种格式,对应的则是”11/07/2009”。其中,str参数是待解析的字符串,format参数是解析格式,它类似于printf()函数的格式化字符串,使用一系列控制字符来描述待解析的字符串的结构和格式。原创 2023-06-04 17:29:02 · 128 阅读 · 1 评论