![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
C++总结
想进步的小孟
这个作者很懒,什么都没留下…
展开
-
ACM
题目:先输入一个N,再输入n行气球的颜色,以0结束文件输入,输出每一个n行中颜色最多的一个颜色。解题思路:定义一个map容器,将color装进去,当输入一个color则m【color】++,定义两个迭代器p,x,通过其键值(即颜色的个数)的比较来判断哪个颜色最多,然后输出其颜色。细节处理:利用map容器处理这个问题。代码: #includeusing namespace std原创 2017-03-18 12:07:32 · 227 阅读 · 0 评论 -
ACM
题目:输入n行数字(2-15个),每行以0结尾,文件以-1结尾。然后找出找出每行中有几个一个数是另一个数的两倍。解题思路:定义一个二维数组a【i】【j】,利用while循环输入,当输入为0则i+1,若为-1则输入结束,定义一个一维数组b【i】,用b【i】来记录每行有多少数,利用三重for循环来判断每行中有几个一个数是另一个数的两倍,定义一个c【i】来记录每行有几个一个数是另一个数的两倍。然后利原创 2017-03-18 12:04:41 · 223 阅读 · 0 评论 -
ACM
题目:将n个砖堆内的砖转移使他每个里面砖的个数相等。解题思路:运用while输入,将砖堆看成数组利用循环通过数组输入砖的个数,然后球出来每个砖堆平均有多少砖,砖堆大于平均数的减去平均值相加即移动的数,然后再定义一个数组,输出一共移动的数。细节处理:输出的时候利用数组输出。代码:#includeusing namespace std;int main(){ int原创 2017-03-12 20:54:36 · 224 阅读 · 0 评论 -
ACM
题目:先输入一个n代表几行字符串,然后将字符串反转过来。解题思路:定义一个二维数组,将n行字符串装入二维数组中,然后用gets函数输入,最后将每行字符串反转过来。处理细节:运用循环和strlen()函数。代码:#includeusing namespace std;int main(){ int i,n,j; char a[1000][80];原创 2017-03-11 19:19:41 · 147 阅读 · 0 评论 -
ACM
题目:先定义一个n为n行字符串,然后输入n行字符串,将字符串里的字母变成下一个字母,如果是Z则变为A。解题思路:用string定义字符串然后利用循环输入n个字符串,然后利用length函数求出字符串的值,判断字符是否为Z若为Z则变成A,若不为Z则str【j】+=1变为此字母的下一个字母,最后按题目输出。细节处理:运用length函数求出str的长度。代码:#includeusing原创 2017-03-11 14:41:24 · 175 阅读 · 0 评论 -
动态规划—01最长子序列
题目:给出一个序列,求出这个序列的最长子序列。解题思路:利用一个二重循环,是一个序列中的这个数与前面的数都比较大小一遍,然后定义一个数组b[i]存这个序列前i个数的最长子序列,然后定义一个c=0,令c与b[i]比较大小,如果c细节处理:利用sort排序将b数组排序,然后输出b[n]即最大的子序列长度。代码:#includeusing namespace std;int main原创 2017-04-18 10:27:59 · 1093 阅读 · 1 评论 -
动态规划总结
动态规划:将一个大问题分成若干个相似的小问题然后求出每个小问题的最优解,将这些最优解组合起来即大问题的最优解。 动态规划指导思想:1.在做每一步决策时,列出各种可能的局部解。 2.依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。 3.以每原创 2017-04-18 10:10:28 · 192 阅读 · 0 评论 -
递归递推总结
递推:递推算法是用一个递推式通过循环来求解题目的过程,是一个从前往后推的过程,根据已知的数据逐步推出结果,递推问题最重要的就是找到递推关系式。递推注意点:1.要注意自己的递推公示,一定要严谨不能出现错误。 2 .求递推公式的时候应该多写几组数据来观察递推公式不要只写两到三组数据,防止出现偶然性。原创 2017-04-18 09:16:40 · 409 阅读 · 0 评论 -
ACM(递归递推—M)
题目:输入一个数n,将n分成若干个数,这些数相乘最大。解题思路:即看一个数n能分成多少个3,当最后一个数是4时则停止分,此时结果最大。细节处理:以4为界限来分别讨论。代码:#includeusing namespace std;int main(){ int n; while(cin>>n) { int i,j,a[18]={原创 2017-03-31 21:07:46 · 402 阅读 · 0 评论 -
ACM(递归递推—O)
题目:对于一个数字n,可以将它分成若干个数,然后使这些数相乘最大。解题思路:即看这个数能分成多少个3,当最后一个数是4时停止分,则这时结果最大。细节处理:以4为界限分别分析。代码:#includeusing namespace std;int main(){ int n; while(cin>>n) { int i,j,a[1原创 2017-03-31 20:57:39 · 327 阅读 · 0 评论 -
ACM(递归递推—K)
题目:对于一个数列 F[i] = i (i = 4); 解题思路:按照题目要求通过递推来求。细节处理:当i代码:#includeusing namespace std;int main(){ int n,F[31]={0,1,2,3},i; while(cin>>n) { if(n>=4) for(i原创 2017-03-31 20:53:11 · 218 阅读 · 0 评论 -
ACM(递归递推—J)
题目:输入一个数N(不能是1111,2222,3333这类数)然后将这个数重新排列形成一个最大的数最小的数,然后这两个数的差如果等于6174这停止,输入一个四位数n然后按要求重新排列候做差,输出每个做得差,然后换一行输出差的个数。解题思路:定义一个函数,将n的个十百千位存入数组中,然后在分别成1000,100,10组成新的四位数。做差,当差为6174时停止。细节处理:利用sort函数排序。原创 2017-03-31 20:48:28 · 253 阅读 · 0 评论 -
ACM(递归递推—I)
题目:孙悟空吃桃子,每天吃全部桃子的一半多一个,第n天的时候剩下一个桃子求一共有多少桃子,输入n结束输入。解题思路:当n大于等于2的时候有这个规律 a[i]=a[i-1]*2+2。细节处理:将n以2为界限分别考虑。代码:#includeusing namespace std;int main(){ int n,i,j=0,a[31]={1,1},c[31];原创 2017-03-31 18:36:14 · 247 阅读 · 0 评论 -
ACM(递归递推—H)
题目:给n个人送n封信,算出这n封信全部送错的情况有多少种。解题思路:先找出规律,规律即a[i]=(i-1)*(a[i-1]+a[i-2]),这种情况是当n大于等于3的时候,当n小于3的时候在定义数组的时候初始化好。细节处理:将情况以3为界限分别考虑。代码:#includeusing namespace std;int main(){ int n,i;原创 2017-03-31 18:31:44 · 294 阅读 · 0 评论 -
ACM(递归递推—G)
题目:小银坐座位,每两个人之间必须有两个空座,每排至少坐一个人,一共有多少种坐法。解题思路:找出其中的规律,即当n>=4的时候a[i]=a[i-1]+a[i-3]+1,当n细节处理:分为n=4来考虑。代码:#includeusing namespace std;int main(){ int n,i,a[46]={0,1,2,3}; while(cin>原创 2017-03-31 18:26:35 · 169 阅读 · 0 评论 -
ACM(递归递推—F)
题目:计算组合数。C(n,m),表示从n个数中选择m个的组合数。计算公式如下:若:m=0,C(n,m)=1 否则, 若 n=1,C(n,m)=1 否则,若m=n,C(n,m)=1 否则 C(n,m) = C(n-1,m-原创 2017-03-31 18:20:15 · 479 阅读 · 0 评论 -
ACM(递归递推—E)
题目:有一对成熟的兔子,每天能生一对兔子,生的兔子为一公一母,小兔的成熟期是一天,求N天后兔子的总数,输入0结束。解题思路:定义一个long long a【100】 的数组并且根据题意给a【1】,a【2】初始化上值,然后算的时候分为n小于3的时候和大于等于3的时候来考虑。细节处理:建立一个数组c【j】来存储兔子的数目,每次循环结束后j++,将c【j】一一赋值最后输出。代码:#inclu原创 2017-03-31 18:16:01 · 284 阅读 · 0 评论 -
ACM(递归递推—D)
题目:题目没看懂什么意思,但是根据输入和输出可以看出输入一个n输出3的n次方。解题思路:定义一个递归函数。代码:#includeusing namespace std;int main(){ long long int a[100]={0,3}; int n,i,d; cin>>n; while(n--) { cin>>d;原创 2017-03-31 18:08:33 · 336 阅读 · 0 评论 -
ACM(递归递推—C)
题目:一个函数f(a,b,c)如果 a ≤ 0 或 b ≤ 0 或 c ≤ 0 返回值为 1,如果 a > 20 或 b > 20 或 c > 20 返回值为 f(20, 20, 20),如果 a 解题思路:按照题目要求根据a,b,c的值的取值范围来写一个递归的函数,然后利用这个函数来进行运算。细节处理:定义一个函数。代码:#includeusing namespace std;原创 2017-03-31 18:03:32 · 324 阅读 · 0 评论 -
ACM(递归递推—B)
题目:输入一个n即n刀输出可以切出的最多的饼书数。解题思路:先列出n=1,2,3,4,5,6的情况下可以切出最多的饼数,然后找到规律,即切第i'刀的时候最多的饼数为第i-1刀时最多饼数加i。代码:#includeusing namespace std;int main(){int n,i,a[101]={0,2};while(cin>>n){ for(i=原创 2017-03-31 12:41:23 · 163 阅读 · 0 评论 -
ACM(递归递推—A)
题目:有一头母牛从第二年开始每年年初生一个小牛,小牛从第四年开始每年生一头小牛,n年以后有多少头牛。解题思路:理清思路,列出前几年牛的个数,然后找出其中的规律,前三年的时候只有一头母牛能生小牛可以将前3年的单列出来,然后从第四年开始利用递推来算第n年牛的数量。细节处理:建立一个数组a【100】利用递推来求出牛的数量,然后用c【100】来存a【i】的值便于一起输出。代码:#include原创 2017-03-31 12:34:08 · 448 阅读 · 0 评论 -
STL总结
易混点:1.set和multiset:set不允元素重复而multiset允许元素重复,set和multiset会将元素自动排序(升序)。 2.map和multimap:map不允元素重复而multimap允许元素重复,map和multimap也会将元素自动排序。重点:1.栈:先进后出,只有一个出口,只能操作最顶端的元素。 2.队列原创 2017-03-31 10:43:43 · 160 阅读 · 0 评论 -
ACM
题目:输入两个数A,B,当A的N次方(A的N次方可以大于小于等于B)最接近B时输出N。解题思路:利用pow函数来求A的N次方,然后通过比较fabs((pow(i,N))-B)与fabs(pow(i+1,N)-B)和(fabs(pow(i,N)-B))与fabs(pow(i-1,N)-B)来判断当N为多少时A的N次方最接近B。细节处理:利用pow函数处理更加方便。代码: #inclu原创 2017-03-19 23:22:56 · 222 阅读 · 0 评论 -
ACM
题目:将能被3和5整除的数组成一个序列,然后输入一个n,输出这个序列中的第n个数。解题思路:先定义一个数组将前七个数存进去,以七为一个周期,如果n能整除7则输出的第n个数为(n/7)*15,如果不能被七整除则第n个数为a[n%7]+(n/7)*15。细节处理:利用if函数将能被7整除和不能被7整除大的数分开分析。代码:#includeusing namespace std;in原创 2017-03-19 23:13:06 · 176 阅读 · 0 评论 -
ACM
题目:先输入一个n代表n行,然后输入n行数字每行两个,使这两个数反转之后相加,然后相加后的结果反转。解题思路:先定义一个使数反转的函数,然后用这个反转函数处理此题。细节处理:运用函数和while输入。代码: #includeusing namespace std;int fun(int m){ int b=0; while(m) {原创 2017-03-19 22:42:48 · 188 阅读 · 0 评论 -
8月1日总结
今天上午的时候做了一个题第二个没做出来,下午做了一个小测试做的头昏脑胀的,晚上又把上午那道没做完的题做了出来。骑士问题:给出一个p行q列的国际棋盘,马可以从任意一个格子开始走,问马能否不重复的走完所有的棋盘。如果可以,输出按字典序排列最小的路径。打印路径时,列用大写字母表示(A表示第一列),行用阿拉伯数字表示(从1开始),先输出列,再输出行。细节处理:建立一个flag变量来判断是否把棋盘上原创 2017-08-01 21:14:59 · 205 阅读 · 0 评论 -
7月31日总结
今天从上午8点多来到机房开始看书,把图论的东西复习了一部分。首先把图的定义又看了一遍,然后开始看图的存储结构,图的存储结构包括两部分:一种是二维数组邻接矩阵存储,另一种是数组模拟邻接表存储,在我看来第一种存储比较通俗易懂,第二种存储方式就比较抽象一点,查阅了很多资料终于把第二种存储搞懂了。然后看的是图的遍历,图的遍历包括深度优先遍历和广度优先遍历,其实和深搜广搜类似。还看了一笔画问题(原创 2017-07-31 21:23:49 · 236 阅读 · 0 评论 -
二分贪心总结
二分算法:二分算法应用条件:数组要有序。(使用二分查找算法的条件:要么升序,要么降序。所以首先要排序,可以使用前面讲到的冒泡排序或是快速排序算法先对数组进行排序)。 二分算法如何应用:在数组有序的前提下,将数组一分为二。在数组有基数个元素的情况下,比如数组有15个元素,用第8个数与待查找数进行比较,如果比他大,那么第8个数之后的所有数就都被排除了,然后再从前面7个数查找。然后再从前面的7个原创 2017-05-03 22:52:50 · 405 阅读 · 0 评论 -
二分贪心—X
题目:输入n和m,n代表n次比赛,m代表个人成绩,输出出现次数第二多的所有人。解题思路:定义一个结构体,结构体包含两个数,一个数表示标号,另一个数表示出现的个数,然后结构体数组进行排列,输出出现个数第二多的数即可。细节处理:用scanf和printf,用cin和cout会超时。代码:#include#include #include#includeusing names原创 2017-05-03 20:17:37 · 186 阅读 · 0 评论 -
二分贪心—V
题目:输入n行数,每行都有两个数分别是a,b代表一个a—b的区间,然后求出一个元素最少的集合,使这个集合与上面的n个集合的交集至少有两个元素的交集。解题思路:先定义一个排序规则(终点大的在后面,若终点一样则起点大的在前面)把这些区间按这个规则排序,先取第一个区间的结尾两个元素,然后用这两个元素与下个区间的开头元素比较大小,如果这两个元素都大于下个区间开头元素,则下个区间不取元素,若其中一个小于原创 2017-05-03 20:14:23 · 284 阅读 · 0 评论 -
二分贪心—U
题目:有一堵墙由n堆砖堆成,但这n堆砖不一样高,求最少移动多少砖可以使这n堆砖一样高。解题思路:先将这些砖加起来除以n即平均数,然后令数组中的每个值都减去这个平均数,把大于0的加起来即移动的最少数目。细节处理:在输入a[i]的时候直接把a[I]累加起来。代码:#includeusing namespace std;int main(){ int a[51],k[5原创 2017-05-03 20:04:11 · 184 阅读 · 0 评论 -
二分贪心—T
题目:有1*1,2*2,3*3,4*4,5*5,6*6大小的盒子,要把它们装到6*6的盒子里,它们的高度都是相同的,用最少的6*6盒子把所有尺寸的盒子都装起来。解题思路:6*6,5*5以及4*4尺寸的物品每个物品需要占有一个箱子,3*3的物品一个箱子可以放4个,2*2的物品箱子可以放9个,1*1的可以放36个,用面积统计1*1箱子的空位,根据这个思路就可以解题了代码:#include原创 2017-05-03 19:55:33 · 175 阅读 · 0 评论 -
二分贪心—E
题目:输入N和C,N代表有N间屋子C代表有C头牛,然后输入N个数代表这N间房子的坐标,牛不喜欢这个布局,一进去就会很暴躁,所以要把牛分的尽可能的远求最近两头牛的最大距离。解题思路:建立一个数组存这些房子的坐标,然后用sort将这些坐标排序,然后令l=0,r=a[N],mid=(l+r)/2,先用mid当作最大的最小距离若两个房子距离大于等于mid时放一头牛,定义m=1,放一头牛m++,到最后比原创 2017-05-03 19:46:06 · 221 阅读 · 0 评论 -
二分贪心—D
题目:输入一个n代表n行,每行有四个数分别代表a,b,c,d,然后从n行中选出a,b,c,d各一个使其和为0,输出总共有几组这种数。解题思路:建立两个数组e[i],f[i],分别存所有a与b的和,c与d的和,然后用sort将f数组排序,后面令e[i]+f[mid]与0比大小若大于0则令上限等于mid-1,反之令下限等于mid+1,直到下限大于上限为止。细节处理:下限要大于上限时才可以,这时原创 2017-05-03 19:33:42 · 157 阅读 · 0 评论 -
二分贪心—B
题目:可以输入最多1000条信息,每行包含一个英语单词然后一个空格后跟一个外文单词,然后输入外文单词输出该外文单词对应的英语单词,若没有对应的则输出eh。解题思路:运用sscanf这个函数将输入的一串字符的空格前后分为两部分,分别存入两个数组中,然后两个数组一个为map的键值一个为实值,输入键值则输出实值。细节处理:利用sscanf将一个字符串中的两部分分为两个部分。代码:#inclu原创 2017-05-03 18:57:15 · 154 阅读 · 0 评论 -
动态规划—29合唱队形
题目:让n个同学站成一列,然后让n-k个同学出列,剩下的同学组成的队列,他们的身高(T代表身高)要按照这个要求:T1 Ti+1 > … > TK (1 解题思路:用b,f两个数组分别存由i为分界点向左的最大下降子序列和向右的最大上升子序列,通过i循环将所有的i值都求出来,然后b[i]+f[i]最大的那个就是可以存在最多的人然后用n减去这个数再加1则是可以去除的最少人数。细节处理:将这个题原创 2017-04-20 18:57:37 · 754 阅读 · 0 评论 -
动态规划—26,30滑雪
题目:输入一个R行C列的方阵,每个坐标输入一个数值代表高度,然后在一个点可以向这个点旁边的上下左右四个点走(旁边的点必须低于这个点),然后求出这个方阵中的可以走的最长长度。解题思路:先定义两个数组dx[]={-1,0,1,0},dy[]={0,1,0,-1}利用循环通过这两个数组与原来坐标相加判断四周的情况,定义一个ok函数,判断该走的那个点是不是在矩阵范围之内,然后定义一个dp(int i,原创 2017-04-20 18:48:10 · 173 阅读 · 0 评论 -
动态规划—18买书
题目:小明有n元钱,全部用来买书,书的价格有10,20,50,100元的,求买书的方案一共有多少。解题思路:这个题是完全背包的问题,用a数组存买书的方案数,a[0]初始化为1然后用完全背包思路解题即可。细节处理:判断n是否能整出10,如果可以再继续算买书的种数,如果不能整除10或者为0,则钱不可能全部用来买书,输出0。代码:#includeusing namespace std;原创 2017-04-20 18:32:15 · 355 阅读 · 0 评论 -
动态规划—14怪盗基德的滑翔翼
题目:有N栋建筑,每栋建筑高度不同,只能从高建筑滑向低建筑,求最多可以经过多少建筑。解题思路:定义两个数组,利用i循环,用两个数组存从i向两边的最大上升子序列和最大下降子序列,循环一遍之后用sort函数将两个数组排序然后比较c[n-1]和d[n-1]的大小,大的那个即是要求的结果。细节处理:用两个数组分别存最大上升子序列和最大下降子序列。代码:#includeusing names原创 2017-04-20 18:27:20 · 463 阅读 · 0 评论 -
动态规划—13最大上升子序列和
题目:给出一个序列,求出这个序列的所有子序列中和最大的那个,输出最大的和。解题思路:利用两重循环 for(i=0;imax,则max=b[j],然后用一重循环在与定义的t=0比较大小求出最大的那个即是答案。细节处理:再定义一个b数组存最大和。代码:#includeusing namespace std;int main(){ int a[1007],b[100原创 2017-04-19 22:42:55 · 390 阅读 · 0 评论