ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:88.18KB ,
资源ID:7869362      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7869362.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(XX第七届蓝桥杯CC++B组题解.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

XX第七届蓝桥杯CC++B组题解.docx

1、XX第七届蓝桥杯CC+B组题解第一题煤球数目有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),.如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。这道题坑死了,第一次看堆成三角棱锥形,草稿本画半天都没画出个三角棱锥。后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥。我去。看懂题目这个题目就很简单了,每层的个数是上层的个数加上层数,意思就是An = An-1 + n,然而题目是求的前100层一共多少煤球。所以是Sn.代码双重for

2、循环就出来了。答案是:1717001. #include2. intmain()3. 4. inta101=0;5. for(inti=1;i101;i+)6. ai=ai-1+i;7. intans=0;8. for(intj=1;j101;j+)9. ans+=aj;10. printf(%dn,ans);11. return0;12. 第二题:生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。注意:你提交的应该是一个整数,不要填写任何

3、多余的内容或说明性文字。呵呵,水题,但是出题人不严谨啊!怎么就不能考虑万一他今年236岁呢.好了不说了强迫症犯了。蓝桥杯这种不像acm的题目的,能暴力直接暴力。不用想太多。直接从1236 枚举 start, end 分别表示他开始过生日的年龄和今年的年龄,然后计算之间吹蜡烛的总和如果等于236就输出start ,end. 答案是:261. #include2. intmain()3. 4. intstart,end;5. for(start=1;start236;start+)6. 7. for(end=start;end236;end+)8. 9. intsum=0;10. for(inti

4、=start;i=end;i+)11. sum+=i;12. if(sum=236)13. 14. printf(start:%dend:%dn,start,end);15. 16. 17. 18. return0;19. 第三题:凑算式 B DEFA + + - = 10 C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中AI代表19的数字,不同的字母代表不同的数字。比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。这个题不多说了,直接暴力生成9的全排

5、列然后去验证等式是否成立,只是验证的时候如果防止精度问题可以通分把除法变成乘法。答案是:291. #include2. intans=0;3. intnum10;4. boolvisit10;5. 6. voidSolve()7. 8. doublesum=num0+(double)num1/num2+(double)(num3*100+num4*10+num5)/(num6*100+num7*10+num8);9. if(sum=10)10. 11. ans+;12. 13. 14. 15. voiddfs(intindex)16. 17. if(index=9)18. 19. Solve(

6、);20. return;21. 22. for(inti=1;i10;i+)23. 24. if(!visiti)25. 26. visiti=true;27. numindex=i;28. dfs(index+1);29. visiti=false;30. 31. 32. 33. 34. intmain()35. 36. dfs(0);37. printf(%dn,ans);38. return0;39. 第四题:快速排序排序在各种场合经常被用到。快速排序是十分常用的高效率的算法。其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。

7、这样,排序问题就被分割为两个子区间。再分别对子区间排序就可以了。下面的代码是一种实现,请分析并填写划线部分缺少的代码。#include void swap(int a, int i, int j)int t = ai;ai = aj;aj = t;int partition(int a, int p, int r)int i = p;int j = r + 1;int x = ap;while(1)while(ir & a+ix);if(i=j) break;swap(a,i,j);_;return j;void quicksort(int a, int p, int r)if(pr)int

8、q = partition(a,p,r);quicksort(a,p,q-1);quicksort(a,q+1,r);int main()int i;int a = 5,13,6,24,2,8,19,27,6,12,1,17;int N = 12;quicksort(a, 0, N-1);for(i=0; iN; i+) printf(%d , ai);printf(n);return 0;注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。这个题目如果接触过快排,了解过快速排序的原理的应该是送分题目,只不过快排单步(就是将一堆数按照某个数作为基准数分成左右两堆)这个实现方式有几种代

9、码表现。在这里答案是swap(a,p,j).第五题:抽签X星球要派出一个5人组成的观察团前往W星。其中:A国最多可以派出4人。B国最多可以派出2人。C国最多可以派出2人。.那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。数组a 中既是每个国家可以派出的最多的名额。程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBEFFFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF.(以下省略,总共101行)#include #define N 6#define M 5#define BUF 1024void f(in

10、t a, int k, int m, char b)int i,j;if(k=N)bM = 0;if(m=0) printf(%sn,b);return;for(i=0; i=ak; i+)for(j=0; ji; j+) bM-m+j = k+A;_; /填空位置int main()int aN = 4,2,2,1,1,3;char bBUF;f(a,0,M,b);return 0;仔细阅读代码,填写划线部分缺少的内容。注意:不要填写任何已有内容或说明性文字。这个题目是这样的,对于f(int a,int k,int m,char b).a 是每个国家的最多指派人数,k表示当前是哪个国家,m表

11、示还需要派送几个人(可以为负数).b表示已经派送的人的字符串。所以这个题目在递归中间的的 第一个循环表示从0ai中让i国选择指派人数,内循环只是向b记录的过程。所以答案是f(a,k+1,m-i,b). 因为这里I = j .应该f(a,k+1,m-j,b)也可以。第六题:方格填数如下的10个格子(如果显示有问题,也可以参看【图1.jpg】)填入09的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。这个题目题目有点表述不明,不知道09 可不可以重复使用。我当时做

12、的时候是当作不可以重复使用来处理的。那么这里我就先当作不可重复使用来讲解。这里题目还是一样先往里面填数。用生成排列的形式。填写完了之后再判断是否可行。答案是:15801. #include2. #include3. intflag34;/表示哪些可以填数4. intmpt34;/填数5. boolvisit10;6. intans=0;7. voidinit()/初始化8. 9. inti,j;10. for(i=0;i3;i+)11. for(j=0;j4;j+)12. flagij=1;13. flag00=0;14. flag23=0;15. 16. 17. voidSolve()18.

13、 19. intdir82=0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1;20. intbook=true;21. for(inti=0;i3;i+)22. 23. for(intj=0;j4;j+)24. 25. /判断每个数周围是否满足26. if(flagij=0)continue;27. for(intk=0;k8;k+)28. 29. intx,y;30. x=i+dirk0;31. y=j+dirk1;32. if(x=3|y=4|flagxy=0)continue;33. if(abs(mptxy-mptij)=1)book=false;34. 35

14、. 36. 37. if(book)ans+;38. 39. 40. 41. voiddfs(intindex)42. 43. intx,y;44. x=index/4;45. y=index%4;46. if(x=3)47. 48. Solve();49. return;50. 51. if(flagxy)52. 53. for(inti=0;i10;i+)54. 55. if(!visiti)56. 57. visiti=true;58. mptxy=i;59. dfs(index+1);60. visiti=false;61. 62. 63. 64. else65. 66. dfs(in

15、dex+1);67. 68. 69. intmain()70. 71. init();72. dfs(0);73. printf(%dn,ans);74. return0;75. 第七题:剪邮票如【图1】, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,【图2】,【图3】中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。其实这个题目还是可前面的一样,先生成,再判断是否可行。这里我们可以先用搜索从12个数里面将所有5个数的

16、组合找出来。然后再用深搜判断这五个是否连在一起。答案是:1161. #include2. #include3. intmpt34;4. intmpt_visit34;5. intnum6;6. inthave13;7. intvisit13;8. intans=0;9. intCount=0;10. 11. voidinit()12. 13. intk=1;14. for(inti=0;i3;i+)15. for(intj=0;j4;j+)16. 17. mptij=k;18. k+;19. 20. 21. intdir42=0,1,0,-1,-1,0,1,0;22. /判断五个数是否能连在一

17、起23. voiddfs_find(intx,inty)24. 25. for(inti=0;i4;i+)26. 27. inttx,ty;28. tx=x+diri0;29. ty=y+diri1;30. if(tx=3|ty=4)continue;31. if(havempttxty=0|mpt_visittxty)continue;32. mpt_visittxty=1;33. Count+;34. dfs_find(tx,ty);35. 36. 37. 38. voidSolve()39. 40. inti;41. memset(have,0,sizeof(have);42. mems

18、et(mpt_visit,0,sizeof(mpt_visit);43. for(i=1;i6;i+)havenumi=1;44. for(i=0;i12;i+)45. 46. intx,y;47. x=i/4;48. y=i%4;49. if(havemptxy)50. 51. Count=1;52. mpt_visitxy=1;53. dfs_find(x,y);54. break;55. 56. 57. if(Count=5)58. 59. ans+;60. 61. 62. 63. /创建5个数的组合64. voiddfs_creat(intindex)65. 66. if(index=

19、6)67. 68. Solve();69. return;70. 71. for(inti=numindex-1+1;i13;i+)72. 73. if(!visiti)74. 75. visiti=true;76. numindex=i;77. dfs_creat(index+1);78. visiti=false;79. 80. 81. 82. 83. intmain()84. 85. init();86. dfs_creat(1);87. printf(%dn,ans);88. return0;89. 第八题:四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数

20、的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 02 + 02 + 12 + 227 = 12 + 12 + 12 + 22(符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 = a = b = c = d并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法程序输入为一个正整数N (N5000000)要求输出4个非负整数,按从小到大排序,中间用空格分开例如,输入:5则程序应该输出:0 0 1 2再例如,输入:12则程序应该输出:0 2 2 2再例如,输入:773535则程序应该输出:1 1 267

21、 838资源约定:峰值内存消耗 256MCPU消耗 3000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入.” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意: main函数需要返回0注意: 只使用ANSI C/ANSI C+ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。这个题目很水也是搜索能做的。但是有点技巧,这里我贡献两个方法给大家参考。方法一:O(n3/2).先暴力枚举前三个数然后做减法判断差是否为一个完全平方数即可。当然虽然这个题目是n3/2看数据貌似过不了。但是貌似我找了几组数据都能秒出结果。应该是绝大多数最外层循环都不会太多。1. #include2. #incl

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1