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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

届蓝桥杯.docx

1、届蓝桥杯第1题:统计不含4的数字题目大意统计10000至99999中,不包含4的数值个数。解题分析:第一种解法: 数学方法,这种是在网上看到的一种解法:最高位除了0、4不能使用,其余8个数字(1,2,3,5,6,7,8,9)均能使用,剩下的四位(千位、百位、十位、个位) 可以使用除了4以外的所有数字,所以共有 8*9*9*9*9种解, 计算得答案为:52488。第二种解法: 暴力搜索方法,这个数字的位数共有5位因此,可以设置a, b, c, d, e,分别代表这5位。代码:#include #include using namespace std;int main() int a, b, c,

2、 d, e; int count = 0; for(a = 1; a = 9; a+) for(b = 0; b = 9; b+) for(c = 0; c = 9; c+) for(d = 0; d = 9; d+) for(e = 0; e = 9; e+) if(a != 4 & b != 4 & c != 4 & d != 4 & e !=4) count+; coutcountendl; return 0;输出为: 52488第2题:计算1千天后的日期题目大意2014-11-09再过1000天是哪一日?解题分析:我想这里题目,对于大家来说分析的时候难点就在于那年是闰年,那年是平年那么

3、从2014到2017年之间2016年是闰年,因此这一年就是365天,这道题,我是手算的。答案是: 2017-08-05重点是要按照格式提交。第3题:竖式加法题目大意祥 瑞 生 辉三 羊 献 瑞?三 羊 生 瑞 气题目用了8个不同的汉字,表示09里八种不同的数字。组成两个数值相加,等于第三个数值。求三羊献瑞”对应到数字是多少?解题分析:第一种暴力搜索:我假设结果中进位的是1,那么三对应的就是数字1.接下来定义变量。 a b c d+ 1 e f b-1 e c b g代码:这段代码输三个结果,把每个结果带进去试一下就知道那个是了。#include #include using namespace

4、 std;int main() int a, b, c, d, e, f, g; for(a = 1; a = 9; a+) for(b = 0; b = 9; b+) for(c = 0; c = 9; c+) for(d = 0; d = 9; d+) for(e = 0; e = 9; e+) for(f = 0; f = 9; f+) for(g = 0; g = 9; g+) if(a * 1000 + b * 100 + c * 10 + d) + (1000 + e * 100 + f * 10 + b) = (10000 + e * 1000 + c * 100 + b * 1

5、0 + g) if(a != 1 & b != 1 & c != 1 & d != 1 & e != 1 & f != 1) if(a != b & a != c & a != d & a !=e & a != f & a != g & b != c & b != d & b != e & b != f & b != g & c != d & c != e & c != f & c != g & d != e & d != f & d != g & e != f & e != g & f != g) cout1 * 1000 + e * 100 + f * 10 + bendl; return

6、 0;第二种解法:全排列方法:代码:#include #include #include using namespace std;int main() int a10; for(int i = 0; i = 9; i+) ai = i; do if(!a2 | !a6) continue; int x = a2 * 1000 + a3 * 100 + a4 * 10 + a5; int y = a6 * 1000 + a7 * 100 + a8 * 10 + a3; int z = a6 * 10000 + a7 * 1000 + a4 * 100 + a3 * 10 + a9; if(x +

7、 y = z) cout yendl; while(next_permutation(a, a + 10); return 0;= 代码填空=第4题:古怪的星号修饰符题目大意是道代码填空题,主要是完成一个字符串s,按宽度width截断后,在固定宽度为width,两边为符号|的居中输出。难点是题目给出了printf(“%*s%s%*s”,_),要求填printf的实参列表。这道题看的时候觉得有点坑,因为自己不懂printf(%*s %s %*s, );的意思,我开始还以为是指针那一块的。现在把网上的给大家分享:有些童鞋可能知道scanf里用*修饰符,是起到过滤读入的作用。比如一个有三列数值的数据

8、,我只想得到第2列数值,可以在循环里用scanf(“%*d%d%*d”, ai)来读入第i行的第2个数值到ai。* 修饰符在printf中的含义完全不同。如果写成printf(“%6d”, 123),很多童鞋应该就不会陌生了,这是设置域宽的意思。同理,%6s也是域宽。* 修饰符正是用来更灵活的控制域宽。使用%*s,表示这里的具体域宽值由后面的实参决定,如printf(“%*s”, 6, “abc”)就是把”abc”放到在域宽为6的空间中右对齐。明白了 * 是用变量来控制域宽,那么这题就简单了,这里应该填写5个实参。然后字符长度的计算应该用buf而不是s,因为buf才是截断后的长度,用s的话,如

9、果s长度超过了width-2,效果就不对了。类似使用说明的代码如下:#include #include #include using namespace std;int main() char s100 = abcd1234; char buf1000; int width = 20; strcpy(buf, s); bufwidth-2 = 0; printf(|%*s%s%*s|n, (width-strlen(buf)-2)/2, , buf, (width-strlen(buf)-2)/2, ); return 0;第5题:补充全排列的回溯算法题目大意1,2,39 这九个数字组成一个分

10、数,其值恰好为1/3,如何组法?与第3题一样可以用全排列暴力,但这题是代码填空题,且已经手写一部分全排列算法,我们负责补充其中一行代码。写全排就是用回溯的思想,直接猜到for循环里的第三行,应该就是把第一行的交换操作再交换回来复制for里的第一行代码,运行下程序,还不放心就调试下,看看数组是不是有按字典序在变化就行了。答案:t=xk; xk=xi; xi=t;= 填空=第6题:加号改乘号题目大意把1+2+3+48+49中的两个加号改成乘号(修改位置不能相邻),使得式子的结果由1225变为2015。解题分析:用双循环暴力两个乘号的位置,计算在数字i、j后的加号改为乘号,式子数值的变化即可,注意j

11、的起始位置为i+2。代码:#include #include using namespace std;int main() for(int i = 1; i = 48; i+) for(int j = i + 2; j = 48; j+) if(1225 - i - (i + 1) - j - (j + 1) = 2015 - i * (i + 1) - j * (j + 1) coutiendl; return 0;第7题:牌型种数题目大意原题:小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不

12、考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。解题分析: 这里也是两种方法, 暴力搜索, 动态规划()。 第一种:暴力方法:#include #include using namespace std;int main() int a13; static int count; int ans = 0; for(a0=0; a0=4; a0+) for(a1=0; a1=4; a1+) for(a2=0; a2=4; a2+) for(a3=0; a3=4; a3+) for(a4=0; a4=4;

13、 a4+) for(a5=0; a5=4; a5+) for(a6=0; a6=4; a6+) for(a7=0; a7=4; a7+) for(a8=0; a8=4; a8+) for(a9=0; a9=4; a9+) for(a10=0; a10=4; a10+) for(a11=0; a11=4; a11+) for(a12=0; a12=4; a12+) if(a0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12=13) count+; ans = count; coutansendl; return 0;具体参考:解法二:动态规划,DP。假设牌是从1到1

14、3按顺序取的,dpij表示取到第i号的牌,目前总共有j张牌的取法总数,那么有状态转移方程(注意公式没考虑边界处理):如图:代码:#include #include using namespace std;typedef long long LL;LL dp1414; / dpij: 当前到第i张牌,总共有j张牌时的解的个数int main() dp10 = dp11 = dp12 = dp13 = dp14 = 1; for (int i = 2; i = 13; i+) for (int k = 0; k = 0) dpik += dpi-1k-4; if (k - 3 = 0) dpik

15、+= dpi-1k-3; if (k - 2 = 0) dpik += dpi-1k-2; if (k - 1 = 0) dpik += dpi-1k-1; dpik += dpi-1k; cout dp1313 endl; return 0;第8题:计算房子间曼哈顿距离题目大意房子按S形摆放,如1 2 36 5 47 8 现输入每行的宽度w,计算出任意两个房子m、n的曼哈顿距离(横向距离+竖向距离)。解题分析:直接计算两点的距离就可以了。代码:#include #include #include using namespace std;Fun(int w, int n, int& x, int& y) x = (n - 1) / w + 1;

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

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