- 博客(62)
- 收藏
- 关注
原创 用python写一个圣诞互换礼物的抽奖小程序
最近和朋友们想玩圣诞互换礼物,但是没找到可以抽奖的小程序,所以我决定自己写一个。游戏规则:参加游戏的人需要随机抽取一个幸运儿送一个礼物,但是注意不要抽到自己,并且不要重复抽同一个人。
2022-12-09 17:34:32
923
1
原创 【PAT】1109 Group Photo (25 分)
1109 Group Photo (25 分)题目大意:给n个人排成k排,排列规则如下:每排的人数必须为n/k(向下取整),多余的人排到下一排后排所有人必须不矮于前排的任何人每排都将最高的人安排在最中间(最中间为(m/2+1),m为那排的人数,结果要向下取整)将人们按降序进入一排,然后按左右左右安排位置(For example, given five people with their heights 190, 188, 186, 175, and 170, the final format
2021-09-08 20:03:05
174
原创 【PAT】1116 Come on! Let’s C (20 分)
1116 Come on! Let’s C (20 分)题目大意:"Let’s C"比赛的获奖规则为:冠军获得"Mystery Award"排名为素数的参赛者获得"Minion"其他人获得"Chocolate"不在ranklist里的,输出"Are you kidding?"思路:用结构体存储每个参赛者的信息,用字符串存奖励;用hash记录该参赛者是否在ranklist里(记录为1)、是否已经被check过(记录为2)将参赛信息存入map中,方便查询知识点:结构体
2021-09-08 20:02:33
156
原创 【PAT】 1117 Eddington Number (25 分)
1117 Eddington Number (25 分)题目大意:“Eddington number”:一个人骑车超过E公里的最大天数E天(一开始每读懂题)。现在分别给出n天的骑行距离,请找出相应的E(<=N)。思路:现将n个数从大到小排序,然后找到v[i] < i + 1,i就是E知识点:代码:#include <iostream>#include <vector>#include <algorithm>using names
2021-09-08 20:01:45
173
原创 【PAT】1093 Count PAT’s (25 分)
1093 Count PAT’s (25 分)题目大意:找出给出字符串里包含"PAT"的次数最后要将结果与1000000007除余(一开始没看懂,原来mode是除余的意思)思路1(用了三重循环,超时了):依次遍历每个字符(i >= len(str)截止)思路2(只需一个循环):对一个A而言,它构成的"PAT"个数为它左边的P的个数和右边的T的个数相乘。总的"PAT"个数为所有A构成的"PAT"个数之和。先统计一共有多少个T:cntt按顺序遍历字符串,若:s[i]
2021-09-08 19:57:33
181
原创 【PAT】1128 N Queens Puzzle (20 分)
题目大意:“Eddington number”:一个人骑车超过E公里的最大天数E天(一开始每读懂题)。现在分别给出n天的骑行距离,请找出相应的E(<=N)。思路:现将n个数从大到小排序,然后找到v[i] < i + 1,i就是E知识点:代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;bool cmp(int a, in..
2021-09-08 19:55:50
159
原创 C++ vector作为函数参数如何传参
用指针传递参数代码:#include <iostream>#include <vector>using namespace std;// 用指针传递void insert_int1(vector<int>* v){ for(int i = 0; i < 10; i++) (*v).push_back(i); // 或 v -> push_back(i)}int main(){ vector<in..
2021-08-16 11:55:46
2334
原创 【PAT】1025 PAT Ranking (25 分)
题目大意:每个测试都允许在不同地方同时运行。为PAT写一个可以融合所有排名列表并且生成最终排名的程序。输出按最终排名增序排。成绩相同的考生排名相同(比如有两个并列第一名,则没有第二名,直接跳到第三名),然后按注册账号增序排序。思路:用结构体存考生信息,里面包含考生号、成绩、考区号、考区排名(输入完该区信息后排名)用二维数组存各个考区的考生信息,每存完一个考区就进行排序,然后分配考区排名,并将该考生放入大数组里最后再给大数组排序、分配排名,然后输出信息知识点:struct二维..
2021-08-13 10:53:16
139
原创 【PAT】1028 List Sorting (25 分)
题目大意:对每一列排序。c=1:按id增序;c=2:按名字增序;c=3:按成绩增序。如果名字或成绩相同,则按id增序排序。思路1:写三个cmp函数,此时变量c为局部变量。知识点:structsort字符串数组的比较:strcmp()代码:#include <iostream>#include <vector>#include <string.h>#include <algorithm>using namespace s..
2021-08-12 22:47:59
111
原创 【PAT】1055 The World‘s Richest (25 分)
1055 The World’s Richest (25 分)题目大意:找出在给定年龄范围内最有钱的人。输出按净财富降序排序,若相同,则按年龄增序,若还相同,按照名字增序排序。若查询结果为0,则输出"None"。思路:先将所有人的信息都存入vector,然后进行排序。查询时输出年龄在给定范围内的人的信息,若查询结果为0,则输出"None"(用flag记录是否有查询结果)知识点:结构体sort字符串数组strcmp(str1, str2)代码:#includ
2021-08-12 16:30:24
105
原创 【PAT】1075 PAT Judge (25 分)
题目大意:根据提交的状态列表,生成PAT的排名列表。若提交不成功,显示为为-1,实际得分为0;若提交成功,显示为[0, p[pid]]。(注意:若用户提交成功但是没编译通过,虽然显示的是-1,但要把分数赋值为0。我之前读错题了,以为得分是-1)。结果按总分排名,若总分相同则排名相同。排名和id后面跟着各题的分数(未提交为’-’,提交多次为最高分)。输出按排名升序。若排名相同,就按满分题目的个数降序排。若还相同,就按id升序排。没提交成功过或没有提交过的人不进行排名(即成绩为-1均..
2021-07-19 13:02:46
150
原创 【PAT】练习总结
笔记设置存储hash的数组可以尽量设大一点。c++中map可随意访问、任意插入,index,vector不行。ASCII码共有128个,其中比较常见的ASCII码:10 = ’\n‘48~57: 0 ~ 965 ~ 90: ’A‘ ~ ’Z‘97 ~ 122: ‘a’ ~ ‘z’C语言定义数组的方法:int a[] = {1, 2, 3}; // 不定长数组,长度由元素个数决定。int a[N];// 定长数组 。int *a;// 定义指针C语言往函数传
2021-07-13 21:29:11
205
原创 【PAT】1002 A+B for Polynomials (25 分)
题目大意:给出两个数字A、B,每个数字都由K个非0的数组成(该数最大为1000位)。要求计算A + B,即将A、B每一位的数字对应相加,最后输出相加后的多位数(最后结果保留1位小数)。思路:用数组存数字,用变量index记录位数,将数字存入数组相应位置。因为最后要统计相加后的数里有几个非零数,所以可将结果存在一个数组里。用cnt存数字里的非零数(而不是数字的最大位!仔细读题!)知识点:vector代码:#include <iostream>#in..
2021-07-13 10:30:51
93
原创 【PAT】1062 Talent and Virtue (25 分)
题目大意:司马光通过道德和才能定义一个人,先定义一个最低底线low和最高标准high,若一个人的道德和才能都高于high,他就是圣人;若一个人的道德高于high,才能低于high高于low,他就是君子;若一个人的道德低于high高于low,才能低于high高于low,但**道德>=才能(not lower than,所以是大于等于号)**他就是愚人;若一个人道德<才能,他就是小人。给一群人按照总分=道德+才能降序排序,若总分相同,则按道德降序排序,若还相同,就按id升序排序。只..
2021-06-02 12:50:40
155
原创 【PAT】1080 Graduate Admission (30 分)
题目大意:根据考生的成绩和填报志愿录取考生。final_grade = (ge + gi)/2,按 final_grade排名,若final_grade相同,就看ge,若都相同,就说明排名相同。;每个学生有k个志愿选择,如果按照排名这个人可以录取,且志愿学校还有名额,就录取该学生到这个学校;若该学校名额已满,但是该校最后一个录取的人的排名和当前人排名相同,该校也要录取这个人。思路:用结构体数组stu存学生信息,用数组quota存每个学校的名额,用数组存每个学校当前已录取的学生个数,用二..
2021-05-28 20:09:06
109
原创 用Python给弟弟生成1000道算术题
动机:阿姨花了30元给幼儿园的小弟弟买了一本习题,里面都是简单的二元加减法。我一听,惊道:“怎么还花钱买题?我动动手指能给你生成一千条。”阿姨觉得二元加减太简单了,想要三元加减法的算术题(x + y + z; x + y - z; x - y - z; x - y + z),因为弟弟还小,只会100以内的加减法,不会负数,所以出的算术题不仅计算结果要在[0, 100]内,算式中的任何两位的计算也要在[0, 100]内。希望弟弟长大后会感谢我,嘻嘻~思路:生成在[1,99]内的随机数x, y..
2021-05-26 12:20:34
1225
5
原创 【PAT】1101 Quick Sort (25 分)
题目大意:找到左边均小于自己和右边均大于自己的数字,这些数字可能是第一次partition选中的pivot思路1:用二重循环硬解题超时,就算用数组也超时,应该是因为二重循环太耗时了。知识点:vectorsort代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ int n, num, i, j..
2021-05-25 14:29:30
92
原创 【PAT】1083 List Grades (25 分)
题目大意:倒叙输出成绩在所给范围内的学生信息(所给学生信息的成绩各不相同)。思路:先排序,然后判断成绩是否在范围内,若在就输出。知识点:结构体vectorsort,自定义cmp代码:#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;struct stu{ string na..
2021-05-25 13:16:39
139
原创 【PAT】1113 Integer Set Partition (25 分)
题目大意:给出n个正整数,将它们分为2个集合,要求S1和S2分别代表两个集合数字的总和,n1和n2分别代表集合的个数,要求|n1 - n2|最小,|S1 - S2|。思路:先从小到大排序;|S1 - S2| = 后半部分的和 - 前半部分的和。若个数为奇数,则|n1 - n2| = 1,否则|n1 - n2| = 0知识点:vectorsort代码:#include <iostream>#include <vector>#include <a..
2021-05-25 09:21:51
112
1
原创 【PAT】1125 Chain the Ropes (25 分)
题目大意:将一些小绳子系成一条绳子,每次只能系两根,并且每系一次,两根绳子的长度减半。输出最大的绳子长度,最后结果四舍五入成不大于最大长度的整数(即int(result))。思路:从小系到大能保留最长的绳子,然后输出最后的结果。把segment排序(rope + segment) / 2知识点:sortvector代码:#include <iostream>#include <string>#include <vector>#..
2021-05-23 22:02:21
94
原创 【PAT】1039 Course List for Student (25 分)
题目大意:给出课程的学生列表,输出学生的选课列表。(1047是给出学生的选课列表,输出课程的学生列表)。思路:用unordered_map存学生的课程列表(操作unordered_map比操作map更快),然后再输出被查询学生的课表,记得要先排序再输出。(1047用了一个二维数组存课程的选课列表)知识点:unordered_mapstringvectorsort代码:#include <iostream>#include <string>#i..
2021-05-23 21:36:20
122
原创 【PAT】1120 Friend Numbers (20 分)
题目大意:找到朋友id,即找出所有数各位数之和,然后从小到大输出。思路:因为set会自动排序和去重,所以将每个数的各位数之和插入set。知识点:set如何获得一个int的各位数代码:#include <iostream>#include <set>using namespace std;set<int> fids;void find_friend(int num){ int f = 0; while(num != 0){..
2021-05-23 21:13:16
110
原创 【PAT】1047 Student List for Course (25 分)
题目大意:思路1:因为set会自动排序,所以用结构体数组存学生的课表,用结构体数组存每节课的学生(不用排序,因为是按照顺序输出课程)。超时了(用太多stl容器)知识点:结构体setvector代码:#include <iostream>#include <set>#include <vector>using namespace std;struct stu{ string name; set<int>..
2021-05-20 21:25:22
95
原创 【PAT】1054 The Dominant Color (20 分)
题目大意:找出图片中的dominant color,即占图片一半以上的color。思路:map存每个颜色出现的次数,输出value超过(M * N) / 2的color知识点:map代码:#include <iostream>#include <map>using namespace std;int main(){ int m, n, color; scanf("%d %d", &m, &n); map&l..
2021-05-16 18:47:10
96
原创 【PAT】1071 Speech Patterns (25 分)
题目大意:找口头禅:找出一个句子中出现次数最多的词(可由字母和数字组成),大小写不敏感。思路:将每个词变小,存到map里,然后将map的键值对存到数组里,将数组按次数从大到小排序,若次数相同就按字母排序单词是由连续的alphanum组成的,由非alphanum分开;注意,若最后一个字符为alphanum,也该将这部分单词存入map最后应将出现次数最多的词输出,若有多个词,就输出字母最小的那个(自定义cmp函数)知识点:mapvectorsortisal..
2021-05-16 16:29:44
93
原创 【PAT】1100 Mars Numbers (20 分)
题目大意:火星数字以13为基数,我需要写一个程序使火星数字和地球数字互相转换。这里只考虑最多两位火星数字。地球 -> 火星:int(地球 / 13)为火星的十位数,(地球 % 13)为火星的个位数火星 -> 地球:十位的火星 * 13 + 个位的火星思路:用2个数组分别表示火星的个位数和火星的十位数知识点:stringvectorgetline(cin, str):火星数字之间可能有空格,所以用getline(cin, str)接收字符串isdigit(char..
2021-05-14 21:33:38
203
原创 【PAT】1112 Stucked Keyboard (20 分)
题目大意:键盘上有的键被卡住了,打字时每次按到被卡主的键,都会重复输出k次这个字符。注意:若之前某个字符正常出现过,后面又出现了n*k次,说明这个键是正常的。思路(来自柳诺):用尽可能多的容器/遍历去存多个信息用map存这个键是否被卡住;用一个数组存这个键是否不为被卡的键,为了避免这个键正常,但恰好输出了n*k次的情况;在输出被卡字符时,用set存这个字符是否之前输出过,避免多次输出;知识点:mapset代码:#include <iostream>#..
2021-05-14 18:01:42
102
原创 【PAT】1121 Damn Single (25 分)
题目大意:找到party中的单身狗,并将这些单身狗升序输出思路1:用map存每队情侣,因为要升序输出单身狗,用vector存参加派对的人,排除情侣,剩下的单身狗们存set里,最后直接输出set就可。不行,超时了。思路2:用map存每队情侣,用set存参加派对的人,检查s[i]的情侣是否存在,若存在就将他们两个人都删掉,最后剩下的就是单身狗。注意:考虑number = 00000的情况!若我将变量设置为int型,number = 00000 时,在查情侣时出现明明没有情侣,却把这个人删除的..
2021-05-12 19:37:34
76
原创 【PAT】1124 Raffle for Weibo Followers (20 分)
题目大意:John在微博上从转发他post的N个粉丝里抽奖,请帮他生成幸运观众的列表。注意:若选择到的人已经被选过了,就考虑下一个人。思路一:unordered_set会自动去重,但是因为unordered_set存的数据是倒序的,所以再放到vector里转置。不行!因为unordered_set里数据的存放位置是无序的。思路二:vector可用reverse()进行转置,所以用vector存中奖者。再用map记录每个人中奖的次数(把字符串映射成数字有点麻烦,所以没用hash记录)。..
2021-05-12 17:30:27
108
原创 【PAT】1137. Final Grading (25)
题目大意:计算每个学生的最终成绩(注意最后的总分是四舍五入得到的整数),判断学生是否能获得证书,获得证书标准为:在线编程任务得分 >= 20060 <= 最终成绩 <= 100(若期末成绩 >= 期中成绩,只考虑期末成绩;否则就以40%期中和60%期末的和算)若满足上述条件,该学生就能拿到证书。并且按照最终成绩(四舍五入的整数)降序输出,若成绩相同,则按id升序输出思路:用map(字符串)存每个人的三个成绩;判断每个人的编程得分是否达标,若达标,再判断他们的..
2021-05-12 16:24:33
95
原创 【PAT】1129 Recommendation System (25 分)
题目大意:在每次用户查询前,根据用户之前查询物品的次数给用户对物品的喜爱程度排序。第一次查询不能给出推荐(所以只有n-1行输出)。思路1:用map存每个物品被查询的次数,然后用vector存map的内容,然后给vector排序。**两个测试点超时!**应该是用vector存数据和用sort排序耗时。知识点:map/ unordered_mapvectorsort()代码:#include <iostream>#include <unordered_ma..
2021-05-12 16:20:35
130
原创 【PAT】1144 The Missing Number (20 分)
题目大意:给出N个整数(整数范围在int的范围),找出不存在其中的最小正整数思路:将整数存入vector(找的是最小正整数,所以负数没有存入的意义),然后再用map存一遍,若该数存在,则m[num] = 1,否则m[num] = 0int的范围在-2147483648-+2147483647,分配不了这么大的数组,所以不能用hash,只能用map从1开始遍历,判断m[i] 是否为1,为0的第一个数就是不存在于vector的最小正整数知识点:vectormapint的取..
2021-05-08 22:14:52
109
原创 【PAT】1149 Dangerous Goods Packaging (25 分)
题目大意:有的货物不能被放进同一个容器里,所以在运输货物时,检查每个容器内是否包含不能放在一起的货物思路一(超时了):用for循环一个一个找用一个结构体数组存不能放在一起的货物(不会二维vector)配对检查每个容器中是否有不能放一起的货物知识点:结构体:定义结构体数组时,<>里是结构体名称,不是变量名vector:若想输入数组的值,需要先初始化为0代码:#include <iostream>#include <string>#inc..
2021-05-08 21:04:31
114
原创 win10 解决 Clion debug时看不到STL容器的值
问题截图:原因: Clion开启了GNU C++ liberary renders解决方法:取消选项 :Settings -> Build, Execution, Delpoyment -> Debugger -> Data Views -> C/C++ -> “Enable GNU C++ library renders”解决问题:...
2021-05-08 18:58:42
3080
13
原创 【PAT】1061Dating (20 分)
题目大意:破译密码: 1. 前两个句子里第一个相同的大写英文字母在字母表的顺序为一周的第几天 2. 前两个句子里第二个相同的字符为第几时(0-9/A-N) 3. 后两个句子里第一个相同的英文字母的位置为第几秒思路:isupper()判断是不是大写字母判断是不是0-9/A-N中的一个isalpha()判断是不是英文字母知识点:isupper()、isdigit()等判断字符的函数在头文件cctype里特别的,stoi()是c11特性,不需导入头文件格式化时空..
2021-05-08 17:44:27
102
原创 【PAT】1153 Decode Registration Card of PAT (25 分)
题目大意:PAT考生号的第1个字母代表考生等级,第24个数字代表考试地点,第510个数字代表yymmdd格式的时间,第1113位表示考生数量(0999)。给出一些PAT考生号,根据查询输出信息:按分数降序输出所给等级所有的考生分数,如果分数相同,按考生号以字母表顺序升序排序(即直接比较两个字符串)输出所给地点所有的考生数量和他们的总分输出所给日期里每个地点的所有考生数量,按考生数量降序排序,若考生数量相同,就按地点升序排序(即直接比较两个字符串)思路:用结构体数组(vector)记录..
2021-05-07 17:14:19
80
原创 【PAT】1035 Password (20 分)
题目大意:检查密码里是否有1、l、0、o,如果检测到了就分别replace 1 (one) by @, 0 (zero) by %, l by L, and O by o知识点:stringvector:v.pushback(1):往v最后面插入一个1 python里是v.append(1)代码:#include <iostream>#include <string>#include <vector>u..
2021-05-06 21:17:18
114
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人