![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
3Sunremitting
优秀是一种习惯,堕落也是一种习惯
展开
-
算法笔记:全排列(C/C++)
题目描述:一般把1~n这n个整数按某个顺序摆放的结果称为这n个整数的一个排列,而全排列只这n个整数能形成的所有排列。例如1、2、3这三个整数的全排列为123、132、213、231、312、321。这些是按照字典序从小到大的顺序给出的。解题思路:从递归的角度去考虑,如果把问题描述为“输出1~n这n个整数的全排列”,可以被分为若干个子问题:“输出以1开头的全排列”“输出以2开头的全排列”…“输出以n开头的全排列”。可以设一个数组P,用来存放当前的排列,再设置一个散列数组,hashTable[x],当x已原创 2020-07-02 16:46:54 · 271 阅读 · 0 评论 -
算法笔记:字符串哈希初步
问题描述:给出N个字符串,每个字符串由三位大写字母组成,再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数?解题思路:把字符串转化为整数,利用空间来换时间效率。代码:...原创 2020-07-02 10:32:36 · 108 阅读 · 0 评论 -
算法笔记:哈希表的入门使用(C/C++)
问题描述:给出N个正整数,再给出M个正整数,问这M个数中的每个数分别是否在N个数中出现过。N、M <= 10^5;eg:N=5,M=3,N个正整数为{8,3,7,2,6},欲查询的M个正整数为{7,2,4},于是后者中只有7和2在N个正整数中出现过。问题解答:常规思路是:对每个要查询的正整数x,遍历所有N个数,看是否有一个数与 x 相等。这种做法的时间复杂度是O(NM),当N和M都很大时,时间复杂度便会无法承受。改进思路:可以用空间换时间,即设定一个 bool 型数组 HashTable[1原创 2020-06-29 23:08:59 · 224 阅读 · 0 评论 -
算法笔记:PAT Ranking(C/C++)
题目描述:有n个考场,每个考场有若干数量的考生。现在给出各个考场中考生的准考证号与分数,要求将所有考生按分数从高到低排序,并按顺序输出所有考生的准考证号、排名、考场号及考场内排名。Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in原创 2020-06-22 10:51:12 · 128 阅读 · 0 评论 -
算法笔记:说反话(C/C++和Python)
题目描述:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。**输出格式:**每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World HelloC/C++代码:在开始之前,再复习一原创 2020-06-17 15:54:43 · 151 阅读 · 0 评论 -
算法笔记:回文数(C/C++和Python)
题目描述读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。C/C++代码:#include<cstdio>#include<cstring>const int MAXN=256;bool judge(char str[]){ int len=strlen(str); for(int i=0;i<len/2;i++) { if(str[i]!=str[len-1-i]) r原创 2020-06-17 11:49:05 · 202 阅读 · 0 评论 -
算法笔记:又一版 A+B(Python和C/C++)
题目描述输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。输入输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。当m为0时输入结束。输出输出格式:每个测试用例的输出占一行,输出A+B的m进制数。C++代码:#include<cstdio>int main(){ long long A,B,sum; int m; while(scanf("%d",&m)!=原创 2020-06-17 11:20:07 · 257 阅读 · 0 评论 -
算法笔记:查找学生信息(C/C++)
题目描述输入N个学生的信息,然后进行查询。输入输入的第一行为N,即学生的个数(N<=1000)接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:02030104输出输出M行,每行包括一个对应于查询的学生的信息。如果没有对应的学生信息,则输出“No Answer!”C++代码:(跑分只有50!好原创 2020-06-16 22:37:45 · 1562 阅读 · 1 评论 -
算法笔记: A+B和C(C/C++和Python)
题目描述给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。输入输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。输出对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。注意:做这个题主要是int型范围的把控,int是占用4个字节,共32位,存储范围是-2147483648~2147原创 2020-06-16 18:21:18 · 466 阅读 · 0 评论 -
算法笔记:比较奇偶数个数(C/C++和Python)
题目描述第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。输入输入有多组数据。每组输入n,然后输入n个整数(1<=n<=1000)。输出如果偶数比奇数多,输出NO,否则输出YES。C/C++代码:#include<cstdio>#include<iostream>#include<cstring>using namespace std;int main(){ char a[15],b原创 2020-06-16 17:03:30 · 299 阅读 · 0 评论 -
算法笔记:特殊乘法(C/C++和Python)
题目描述写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35输入两个小于1000000000的数输出输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。说明:对于这种类型的题,输入的数据位数很多,数据很大时,可以把数据按照字符串输入,之后按照字符串的操作进行,当需要计算时,再把字符串转化为整型。C/C++代码:#include<cstdio>#in原创 2020-06-16 11:36:57 · 196 阅读 · 0 评论 -
算法笔记:A+B(C/C++和Python)
问题描述:给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。现在请计算A+B的结果,并以正常形式输出。C/C++代码:#include<cstdio>#include<iostream>#include<cstring>using namespace std;int main(){ char a[15],b[15]; while(scanf("%s %s",a,b)!=EOF) { int flaga=1,flagb原创 2020-06-15 21:04:42 · 333 阅读 · 0 评论 -
算法笔记:剩下的树(C/C++和 Python)
题目描述有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。输入两个整数L(1<=L<=10000)和M(1<=原创 2020-06-15 16:48:18 · 228 阅读 · 0 评论 -
算法笔记:挖掘机技术哪家强(C/C++和Python)
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在第 1 行给出不超过10^5 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。C/C++代码:#include<cstdio>const int maxn=100010;int school[maxn]={0};int main()原创 2020-06-15 15:37:28 · 187 阅读 · 0 评论 -
算法笔记:3n+1猜想(C/C++和Python)
题目描述:对于任何一个自然数n(n<1000),偶数就砍一半,奇数就3n+1再砍。按这样的规则看下去,求最终得到1所需的步数(砍了多少次?)C++代码#include<cstdio>#include<cstring>int main(){ int n,step=0; scanf("%d",&n); while(n!=1) { if(n%2==0) { n=n/2; step++; } else { n=3*n+1原创 2020-06-15 12:06:17 · 244 阅读 · 0 评论