- 博客(13)
- 收藏
- 关注
原创 【蓝桥杯2014C/C++B组省赛真题】——史丰收速算
在做这种程序填空的时候在13年的真题中一眼看出来了,以至于做14年代码量比较高的时候没什么头绪,题目也难看懂。在看完郑未老师的题解后,自己再做过一遍,总结了以下几点:1.先将多余的东西注释掉,然后编译2.从主函数看起3.将代码转化为文字,结合题目看4.必要时可以单步调试在这道题中,从主函数看,调到多位数乘以7的函数中,在必要的代码旁打上注释,发现里面有计算个位和计算进位的函数,先看计算个位的,结合题意来看,比较容易看得懂,接下来到计算进位的函数。在这个过程中虽然知道是对原串进行拷贝,但是不明白在t
2021-03-17 15:31:01
139
原创 【蓝桥杯2013C/C++B组省赛真题】——带分数
这道题是一道全排列的题目,运用到algorithm里的next_permutation,这样代码量会少很多。这道题的思路就是将1到9个数字每种情况都分配。在分配的时候,把我给绕进去了,调试了好久,先看代码:在把字符串传入函数中时,需要传入字符串,及位置与截取的长度,在这个过程中,我将位置与长度的信息搞混了,出了一系列的问题。...
2021-03-16 19:57:05
153
原创 【蓝桥杯2013C/C++B组省赛真题】——连号区间数
这道题就是一个简单的两个for循环的遍历,只不过我的思路狭窄了,在判断是否为连号区间时,我将区间里的元素进行了排序,之后时间复杂度到了n^3logn,而CPU的时间是3ms,超时了。于是,我在看到郑未老师的题解时,发现进行连号区间的判断只需要一个if就可以了,即几下区间里的最大值和最小值,然后将区间第一个和最后一个下标相减+1与最大值和最小值相减+1一比较久可以了,原理就是如果这个区间里面的元素是连续的那么可以用最大值减去最小值+1来算出元素有多少个。代码如下:...
2021-03-16 19:46:54
191
原创 【蓝桥杯2014C/C++B组省赛真题】——李白打酒
我一看这道题就是类似于13年39级台阶那道题,运用的同样是深度优先搜索。不过要注意的是这两道题目都是有限制条件的,39级台阶限制条件是最终的步数是要偶数,而李白打酒是最后遇到的一定是花(即只剩一口酒)。这种类型的题目可以先把限制条件去掉,想出思路后再把条件加上。这道题因为最后遇到的是花,并且喝完了酒,所以你可以把花的数目减掉1,而酒最后也剩下一抖。代码如下:这里我有个思路的误区,我认为最后如果不遇到花的话,酒是不可能喝完的,于是我让酒(即n)为0了,但是遇到酒店酒的数量也可以为0的,即0*2=0;
2021-03-15 10:45:24
260
原创 【蓝桥杯2014C/C++B组省赛真题】——奖券数目
这道题我一开始想的是把枚举出来的数字一个个拆分,看有没有4这个数字,但是感觉这样做很傻。在我看了郑未老师的解答后,有一种新奇的思路:就是将数字转化为string类,然后用其find函数去寻找有没有‘4’这个字符。(find函数找不到就返回string::npo,在官方提供的API可以查到)。代码如下:...
2021-03-15 10:37:20
119
原创 【蓝桥杯2013C/C++组省赛真题】——翻硬币
题解思路来源于郑未老师。这一题中,关于状态的改变,有一个思路是广度优先搜索,另外一个思路是找规律(但是我没想到)。思路一:广度优先搜索广度优先搜索的方法是运用队列,首先把初始的串放进队列中,然后相继把初始串变化一次的串(从头到尾)放进队列,但是要注意重复的串就不用放进队列了。然后每弹出一个元素(串),就与最终串进行比较,如果发现与最终串一致,则结束。如果不一致,则把弹出来的那个串从头到尾都变化的串加入队列中(指的是从头到尾翻硬币的情况)。为什么可以这样求出最优解呢,因为广度优先搜索是从相邻最近的元素开
2021-03-14 10:50:19
266
2
原创 【蓝桥杯2013C/C++省赛真题】——错误票据
这道题知识点:1.输入没有指定规模的数据2.算法排序(sort)在输入没有指定规模的数据时,应想到1.运用字符串输入2.然后将字符串中的空格去掉3.再将字符串里的数字转为整形存取数组里在1中,循环输入定义的string s就可以,之后将s输入进istringtream iss这个输入流中(目的是为了实现一边输入新定义string ss直到为空,一边去掉空格),运用getline(iss,ss,’ ')实现不断去掉空格的输入,最后运用stringstream将字符串类型转化为整形(strings
2021-03-12 21:07:08
236
原创 【蓝桥杯2013C/C++省赛真题】——三部排序
这道题目如果学过快速排序的话,就是快速排序的分割的思路(详细可以看挑战程序设计竞赛2)。里面有3个指针,当p指向的数字比0大的时候,与right指向的数字对换,这样大于0的数字排在了right的右边,而原来right指向的未知数现在也被p所指着,小于p指向的数与left指向的数对换,这样left的左边就全是小于0的数了,同时p和left两个指针往后移动。那么大于0于小于0的数都处理完了,等于0的数要怎么处理呢,按照之前的思路,left指向的数是小于0的,放在left的左边,同理,right指向的数是大于0的
2021-03-12 20:55:03
134
原创 【蓝桥杯2013C/C++省赛真题】——前缀判断
这道题是一道关于指针字符数组的题目,看懂题目后很显然在主串和子串都不越界的情况下,如果一一比较字符,若有不同,则子串不是主串的子串,接下来到下一个if,这个if就是判断在上面while循环以后子串是否还有,如果有那么它就不是子串了。这道题就是很简单的水题,理解题意后很容易可以看出来。...
2021-03-12 20:43:26
67
原创 【蓝桥杯2013年C/C++省赛真题】——39级台阶
这道题类似斐波那契数列或者是小青蛙跳台阶,只不过加了一个限制条件:迈的步数是偶数。对于迈的步数是偶数,只需要在函数里添加一个Step的变量就可以了。解析:对于每一级台阶,小明都面临着迈一步还是两步的抉择,迈出了一步或者两步,剩下的台阶就会少1级或者2级,所以会有f(n-1),f(n-2),当你迈出的级数等于39并且步数为偶数时,那么说明你这一系列下来的操作是可行的,于是计数器cnt++。如果不满足条件,例如你迈出的总级数超过了台阶(n<0)或者步数为奇数(Step%2==1)说明你之前一系列的操作
2021-03-12 11:27:00
225
原创 【蓝桥杯2013年C/C++省赛真题】——马虎的算式
这道题就是简单的枚举,但是要注意暴力枚举会不会超时,简单枚举5个数,运用到5重循环,数据规模是1到9,就是O(n的5次方)=9的5次方。一般来说CPU每秒执行10的8次方,所以这个枚举是可行的。代码如下:...
2021-03-12 11:08:10
202
原创 【蓝桥杯2013年C/C++省赛真题】——高斯日记
一下解法是根据郑未老师的题解:解法一:运用Excel,因为题解是根据已有的日期+天数来推算日期,所以可以运用Excel的简便的加减乘除来运算天数(无非就是考虑是否为闰年)。先推算出1777年结束是几天(假设不知道坑:4月的30号算第一天),之后以年为单位来推算日期,这时候运用到除法来算出是否是闰年,以4年为单位来算天数,当接近到例题天数时,用例题天数减去接近天数,经过推算发现算出来的日期与例题日期相差一天,于是得知4/30号是第一天,以此推算,就可求出日期。解法二:运用代码实现:在以上代码中,
2021-03-12 10:22:36
168
1
原创 关于C语言中scanf函数“不为人知”的一面
关于函数scanf有以下几点你可能不知道1.scanf**函数是有返回值的,它的返回值是0或1,在成功输入后,它的返回值是1,否则是0。如下代码:// 验证scanf函数的返回值 (scanf是有返回值的,成功输入则是1,否则为0) int i,t; i=scanf("%d",&t); printf("%d",i); //输入数字返回i的值为1,字母则为0 依照这个,咱们可以做一些实用的东西:// 试试输入不限规模的数据并处理
2020-12-24 21:30:16
100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人