第七届蓝桥杯C++程序设计大学B组省赛题目
- 格式:doc
- 大小:109.54 KB
- 文档页数:10
java蓝桥杯b组题目摘要:1.蓝桥杯B 组题目概述2.蓝桥杯B 组题目的类型3.如何准备蓝桥杯B 组题目4.总结正文:【蓝桥杯B 组题目概述】蓝桥杯是中国的一项全国性计算机科学比赛,每年举办一次。
该比赛旨在发掘和培养高中和大学生的计算机科学和信息技术方面的才能。
蓝桥杯B 组是针对高中生举办的比赛,参赛选手需要通过地区赛、省赛等多个层次的选拔,最终进入全国总决赛。
蓝桥杯B 组题目是比赛的重要组成部分,题目内容涵盖了计算机科学的各个领域,如算法与数据结构、计算机网络、数据库、操作系统等。
【蓝桥杯B 组题目的类型】蓝桥杯B 组题目分为两种类型:个人赛题目和团队赛题目。
个人赛题目是针对单个选手进行的比赛,要求选手在规定时间内独立完成一个计算机程序,并满足题目要求。
团队赛题目则是由3 名选手组成的团队共同完成一个计算机程序,并满足题目要求。
两种类型的题目都注重考察选手的编程能力和解决实际问题的能力。
【如何准备蓝桥杯B 组题目】准备蓝桥杯B 组题目需要掌握一定的计算机科学基础知识,包括算法与数据结构、计算机网络、数据库、操作系统等方面的知识。
此外,还需要进行大量的编程练习,提高编程能力和解决实际问题的能力。
具体的准备方法包括:1.学习计算机科学基础知识,了解计算机编程的基本思想和方法。
2.练习编写算法和数据结构,掌握常用的算法和数据结构,如排序算法、查找算法、树、图等。
3.熟悉计算机编程语言,如C++、Java 等,熟练掌握编程语言的基本语法和常用函数库。
4.进行模拟练习,模拟蓝桥杯比赛的形式和要求,提高自己的应变能力和抗压能力。
【总结】蓝桥杯B 组题目是高中生参加的一项重要的计算机科学比赛,考察选手的编程能力和解决实际问题的能力。
蓝桥杯 c 试题及答案蓝桥杯是中国著名的信息技术竞赛,被誉为“程序员的奥林匹克”。
每年举办的蓝桥杯分为初赛和复赛两个阶段,覆盖了大学生、高中生和中学生等多个年龄段。
本文将为大家介绍蓝桥杯 C 试题及答案,希望能对参赛者有所帮助。
一、试题概述蓝桥杯 C 试题是蓝桥杯竞赛中的一道编程题目,通常难度较大,需要对编程语言有一定的掌握和理解。
该题目主要涉及算法、数据结构、编程思想等方面的知识,要求选手提交一个能够运行的程序,并输出符合题目要求的结果。
二、题目要求蓝桥杯 C 试题通常以具体的问题场景为背景,要求选手使用编程语言解决实际的问题。
试题要求选手根据题目描述,编写相应的程序代码,并在规定的时间内提交答案。
三、解题思路解决蓝桥杯 C 试题首先需要仔细阅读题目要求和描述,理解问题的背景和具体需求。
在编写程序时,需要灵活运用所学的算法和数据结构知识,合理选择合适的数据类型和数据结构来解决问题。
解题思路可以从以下几个方面展开:1. 根据题目描述建立适当的数据模型;2. 分析题目需求,确定解题思路;3. 编写代码实现解题思路;4. 测试代码,确保程序运行正确。
四、参考答案由于蓝桥杯竞赛的试题内容每年都有所变化,因此无法提供具体的参考答案。
但是,在参加蓝桥杯之前,可以通过学习历年的蓝桥杯 C 试题,了解题型和解题方法,提高自己的编程能力。
在备战蓝桥杯时,可以参考以下几点建议:1. 多做练习题,熟悉各种题型;2. 学习常用的算法和数据结构,如排序、查找、树、图等;3. 加强对编程语言的掌握,熟悉常用的语法和函数库;4. 参加类似的编程比赛,提高解题速度和编码能力;5. 与他人讨论、交流,学习他人的解题思路和方法。
总之,蓝桥杯 C 试题及答案是参赛者备战蓝桥杯竞赛的重要参考资料。
希望本文的介绍能够对参赛者有所帮助,并祝愿大家在蓝桥杯竞赛中取得好成绩!。
第七届蓝桥杯省赛javaB组第七题剪邮票剪邮票如【图1.jpg】, 有12张连在⼀起的12⽣肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接⼀个⾓不算相连)⽐如,【图2.jpg】,【图3.jpg】中,粉红⾊所⽰部分就是合格的剪取。
请你计算,⼀共有多少种不同的剪取⽅法。
请填写表⽰⽅案数⽬的整数。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
-------------------------------------------------------------------------------------------------思路:1.五重循环求出找出所有可能的邮票减法,注意去掉剪的邮票相同但剪的次序不同的情况。
2.dfs每种剪法。
利⽤{+4,-4,+1,-1}的位置关系来判断每张邮票是否是上下左右相邻的,此时要注意4+1=5的情况。
public class Main {static int way[] = {-4,-1,1,4};static int sum = 0;public static void main(String args[]){int flag[] = new int[13];for(int a = 1;a<=12;a++){for(int b = a+1;b<=12;b++){for(int c = b+1;c<=12;c++){for(int d = c+1;d<=12;d++){for(int e = d+1;e<=12;e++){if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e){// 得到所有可能的剪法int arrays[] = {a,b,c,d,e};flag[a] = 1;flag = new int[13];qiu(arrays[0],flag,arrays);int l;for(l = 0;l<=4;l++){if(flag[arrays[l]]==0){break;}}if(l==5){sum++;}}}}}}}System.out.println(sum);}// dfspublic static void qiu(int goal,int flag[],int arrays[]){int i;int res = 0;for(i = 0;i<4;i++){res = goal+way[i];int mark = com(arrays,res);if(mark == 1 && flag[res] == 0){if(res == 5&&goal==4) {continue;}if(res == 9&&goal==8) {continue;}if(res == 4&&goal==5) {continue;}if(res == 8&&goal==9) {continue;}flag[res] = 1;qiu(res,flag,arrays);}}}public static int com(int arrays[],int temp){for(int i = 0;i<arrays.length;i++){if(arrays[i] == temp){return 1;}}return -1;}}。
java算法第七届蓝桥杯B组(题+答案)9.取球博弈9.取球博弈 (程序设计)两个⼈玩取球的游戏。
⼀共有N个球,每⼈轮流取球,每次可取集合{n1,n2,n3}中的任何⼀个数⽬。
如果⽆法继续取球,则游戏结束。
此时,持有奇数个球的⼀⽅获胜。
如果两⼈都是奇数,则为平局。
假设双⽅都采⽤最聪明的取法,第⼀个取球的⼈⼀定能赢吗?试编程解决这个问题。
输⼊格式:第⼀⾏3个正整数n1 n2 n3,空格分开,表⽰每次可取的数⽬ (0<n1,n2,n3<100)第⼆⾏5个正整数x1 x2 ... x5,空格分开,表⽰5局的初始球数(0<xi<1000)输出格式:⼀⾏5个字符,空格分开。
分别表⽰每局先取球的⼈能否获胜。
能获胜则输出+,次之,如有办法逼平对⼿,输出0,⽆论如何都会输,则输出-例如,输⼊:1 2 31 2 3 4 5程序应该输出:+ 0 + 0 -再例如,输⼊:1 4 510 11 12 13 15程序应该输出:0 - 0 + +再例如,输⼊:2 3 57 8 9 10 11程序应该输出:+ 0 0 0 0资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 3000ms1 import java.util.Scanner;23 public class _9取球博弈 {4 public static int [] n = new int[3];5 public static int [] init = new int[5];6 public static int [] end = new int[1000];7 public static char [] sign = {'-','0','0','+'};8 public static void main(String [] args){9 Scanner scan = new Scanner(System.in);10 for(int i = 0; i < 3; i++){11 n[i] = scan.nextInt();12 }13 int Min = Math.min(n[0], Math.min(n[1], n[2]));14 for(int i = 0; i < 5; i++){15 init[i] = scan.nextInt();16 }17 for(int i = 0; i < Min; i++){18 end[i] = 2;19 }20 for(int i = Min; i < end.length; i++){21 int temp = 0;22 for(int j =0; j < 3; j++){23 if(i - n[j] < 0)24 continue;25 else if(end[i-n[j]] == 3){26 if(n[j]%2 != 0)27 temp = 1 > temp ? 1 : temp;28 }29 else if(end[i-n[j]] == 0){30 if(n[j]%2 == 0)31 temp = 3;32 else33 temp = 2 > temp ? 2 : temp;34 }35 else if(end[i-n[j]] == 2){36 if(n[j]%2==0)37 temp = 2 > temp ? 2 : temp;38 else39 temp = 3;40 }41 else if(end[i-n[j]] == 1){42 if(n[j]%2==0)43 temp = 1 > temp ? 1 : temp;44 }45 }46 end[i] = temp;47 }48 for(int i = 0; i < 5; i++){49 System.out.print(sign[end[init[i]]]+" ");50 }51 }52 }(参考⽹上的,没有思路0.0)。
1.蓝桥杯全国软件和信息技术专业人才大赛是由哪个部门主办的?A.教育部(答案)B.科技部C.工业和信息化部D.国家发展和改革委员会2.蓝桥杯大赛主要考察参赛者的哪些能力?A.编程和算法设计能力(答案)B.市场营销能力C.团队协作能力D.演讲能力3.蓝桥杯大赛通常分为哪些组别进行比赛?A.大学A组、大学B组和大学C组(答案)B.初级组、中级组和高级组C.青少年组、成人组和大师组D.企业组、学校组和个人组4.在蓝桥杯大赛中,以下哪种编程语言是常用的?A.C/C++(答案)B.Python(虽然Python也常被使用,但在此处作为非唯一或首选答案)C.Java(Java也是常用语言,但同样非首选答案)D.JavaScript5.蓝桥杯大赛的获奖者通常可以获得哪些奖励?A.奖金、证书和学校加分(答案)B.实物奖品、旅游机会和荣誉称号C.股票、期权和就业机会D.学术期刊发表机会6.蓝桥杯大赛的参赛资格通常要求参赛者是什么身份?A.在校大学生(答案)B.企业员工C.专业程序员D.无特定身份要求7.在蓝桥杯大赛中,以下哪个环节不是必须的?A.提交代码并运行通过测试((答案,此选项描述了一个通常情况,但并非所有题目都需提交并运行代码,而是根据题目要求可能只需提交答案或解题思路)B.理解题目要求C.设计算法或解决方案D.在规定时间内完成题目8.蓝桥杯大赛的题目难度通常是如何分布的?A.从易到难,逐步增加(答案)B.所有题目难度相同C.难度随机分布D.先难后易9.参加蓝桥杯大赛对参赛者未来的职业发展有哪些帮助?A.提升编程技能和算法设计能力,增加就业竞争力(答案)B.直接获得高薪工作机会C.获得学术研究成果D.无需进一步学习即可成为专家10.蓝桥杯大赛的举办周期是多久?A.每年一届(答案)B.每两年一届C.每季度一届D.每月一届。
2020蓝桥杯C++B组省赛第⼆场个⼈感受和个⼈题解[2020**蓝桥杯C++B组省赛第⼆场个⼈感受和题解]简单的个⼈感受时间回到之前打校内模拟,那时候校排名11+,省排40+;感觉不尽⼈意,毕竟之前正常打⽐赛都能排很靠前,可能是我没认真打,也可能线上打⽔分有点⼤,总之那时候我觉得要不是⾃⼰能⼒⽋缺,要不就环境太⽔了。
后⾯真正到快开始⽐赛的前⼀周我才开始准备蓝桥杯,看了很多博客,和去年真题,感觉听起来拿奖挺容易的,听起来省⼀有⼿就⾏。
就也没顾及太多东西了。
打的那天我是很平和的⼼态,感觉能赢就冲刺⼀下,就冲刺⼀把,能参加国赛就去北京玩玩。
结果⽐赛的机⼦和环境直接爆炸,我写完前⾯5个填空都没检查,想着后⾯回来测试代码,结果电脑死机,代码直接没了,中途等待换机耽误了半个⼩时,最后提交最后⼀个题⽬30%样例还发现⽐赛提前2分钟结束了,直接少了7.5分,⽽且压根不会给你补时间。
总之种种现场情况恶⼼到我了。
⽽且很多⼈也出现类似我的情况。
打完后就没⼼情对答案了,就隔了好久,才⽆意间打开博客随便逛了逛,发现好像我挺⾛运的,完全没检查过的填空题⼀遍过全对了,然后除了最后没交上的7.5其他貌似都还⾏。
最后出成绩也在意料之中,省⼀,貌似也是省内b组排第6(如果7.5分加上可能还能冲⼀冲),但省⼀的确太多了,最神奇的理论就是电脑出问题的⼈省⼀都稳了。
最后的最后,,就是还要交300打国赛,⽽且⼜是在学校线上考试,,害,这⽐赛就没什么仪式感了,真花钱买证。
⽆解~建议与⼩技巧1. 熟练Excel2. 对于⽇期模拟时钟时间模拟⼀定要熟练3. 熟悉使⽤next_permutation全排列和⼆分查找等常见函数4. 能⽤long long 就别⽤int,很多题⽬就卡int 范围5. 了解常见的优化时间⽅法:scanf printf替代cin cout,变量的外部定义等等6. 熟悉Dev编译器的使⽤,学会查询api⽂档,或者⼲脆就记下常⽤的就⾏7. 切记需要return 0,正确使⽤标准库,和C版本,别写过时代码,也别写超前代码,⽼⽼实实⾛。
蓝桥杯训练试题及答案1. 单项选择题请从以下选项中选择最符合题意的答案。
(1) 以下哪个选项是Python语言的解释器?A. JavaB. Node.jsC. PythonD. Ruby答案:C(2) 在HTML中,用于定义最重要的标题的标签是什么?A. <h1>B. <h6>C. <p>D. <div>答案:A2. 多项选择题请从以下选项中选择所有符合题意的答案。
(1) 以下哪些是数据结构中的基本概念?A. 栈B. 队列C. 树D. 循环答案:A, B, C(2) 在JavaScript中,哪些关键字用于声明变量?A. varB. letC. constD. function答案:A, B, C3. 判断题请判断以下陈述是否正确。
(1) 在C语言中,数组的索引从1开始。
答案:错误(2) 在数据库中,主键用于唯一标识表中的每条记录。
答案:正确4. 填空题请根据题目要求填写适当的内容。
(1) 在Python中,用于定义函数的关键字是____。
答案:def(2) 在HTML中,用于插入图片的标签是____。
答案:<img>5. 简答题请简要回答以下问题。
(1) 什么是算法的时间复杂度?答案:算法的时间复杂度是指算法执行时间随输入规模增长的变化趋势,通常用大O表示法来描述。
(2) 请简述面向对象编程的三大特性。
答案:面向对象编程的三大特性包括封装性、继承性和多态性。
6. 编程题请编写一个函数,实现将输入的字符串反转。
(1) 编程语言:Python答案:```pythondef reverse_string(s):return s[::-1]```(2) 编程语言:JavaScript答案:```javascriptfunction reverseString(s) {return s.split('').reverse().join('');}```。
第一题正确答案:52488(我居然上来第一题就错了居然写了13440→_→)//cout<<8*9*9*9*9; →_→第二题结果填空5‘星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1天,请你计算它爆炸的准确日期。
请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。
比如:2015-02-19 请严格按照格式书写。
不能出现其它文字或符号。
-题解:不用废话,直接手算顶多3分钟,注意2016是闰年正确答案:2017-08-05第三题结果填空9‘三羊献瑞观察下面的加法算式:祥瑞生辉+ 三羊献瑞-三羊生瑞气(如果有对齐问题,可以参看【图1.jpg】)其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
-题解:水题,给“祥瑞生辉三羊献气”编号01234567,直接回溯穷举即可1 #include <iostream>2using namespace std;第三题正确答案:1085第四题代码填空11‘格子中输出StringInGrid函数会在一个指定大小的格子中打印指定的字符串。
要求字符串在水平、垂直两个方向上都居中。
如果字符串太长,就截断。
如果不能恰好居中,可以稍稍偏左或者偏上一点。
下面的程序实现这个逻辑,请填写划线部分缺少的代码。
对于题目中数据,应该输出:++abcd1234++(如果出现对齐问题,参看【图1.jpg】)注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
-题解:我是一名OI党,入门直接学的是C++,结果考了个printf里面%*s的用法。
太特么冷门了,穷举了没试出来,原来后面的参数要跟两个。
第一题煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
这道题坑死了,第一次看堆成三角棱锥形,草稿本画半天都没画出个三角棱锥。
后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥。
我去。
看懂题目这个题目就很简单了,每层的个数是上层的个数加上层数,意思就是An = An-1 + n,然而题目是求的前100层一共多少煤球。
所以是Sn.代码双重for循环就出来了。
答案是:1717001.#include<stdio.h>2.int main()3.{4.int a[101] ={0};5.for(int i = 1 ; i < 101 ; i ++)6. a[i] = a[i-1] + i;7.int ans = 0;8.for(int j = 1 ; j < 101 ; j ++)9. ans += a[j];10. printf("%d\n",ans);11.return 0;12.}第二题:生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
呵呵,水题,但是出题人不严谨啊!!!怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了。
蓝桥杯这种不像acm的题目的,能暴力直接暴力。
不用想太多。
直接从1~236 枚举start, end 分别表示他开始过生日的年龄和今年的年龄,然后计算之间吹蜡烛的总和如果等于236就输出start ,end. 答案是:261.#include<stdio.h>2.int main()3.{4.int start,end;5.for(start = 1 ; start < 236 ; start ++)6. {7.for( end = start ; end < 236 ; end ++ )8. {9.int sum = 0;10.for(int i = start; i <= end; i ++)11. sum += i;12.if( sum == 236)13. {14. printf("start : %d end : %d\n",start,end);15. }16. }17. }18.return 0;19.}第三题:凑算式B DEFA + — + -——— = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
蓝桥杯b组c语言历年题目全文共四篇示例,供读者参考第一篇示例:蓝桥杯是中国面向大学生的计算机科学与编程竞赛,设立了不同级别的组别和不同的题目形式,其中B组是C语言编程的比赛,考察参赛选手对于C语言编程的理解和应用能力。
参加B组比赛需要具备一定的编程基础和C语言知识,适合有一定编程经验的大学生参与。
历年来,蓝桥杯B组的C语言题目围绕着各种不同的主题展开,涵盖了计算机科学与编程的各个方面,从基础的数据结构和算法到高级的计算机网络和操作系统等内容,题目设计丰富多样,旨在考察参赛选手的编程能力和创新思维。
以下是部分历年蓝桥杯B组的C语言题目:1. 编写一个程序,实现一个简单的计算器功能,支持加减乘除运算,并能够处理输入错误的情况。
2. 设计一个程序,实现一个简单的俄罗斯方块游戏,要求具备显示界面和键盘控制功能。
3. 编程实现一个简单的网络聊天程序,要求实现客户端和服务器端的通信功能,支持实时消息传输。
4. 设计一个程序,模拟实现一个简单的操作系统,包括进程管理、文件系统和内存管理等功能。
5. 编写一个程序,实现一个简单的图形界面,包括按钮、文本框和标签等控件,能够响应用户的操作。
这些题目涵盖了C语言编程中的各个方面,要求选手具备良好的编程基础和解决问题的能力,能够独立完成编程任务并提供有效的解决方案。
蓝桥杯B组的C语言题目旨在培养参赛选手的编程能力和创新思维,帮助他们提升对计算机科学和编程的理解和实践能力。
参加蓝桥杯B组比赛不仅可以锻炼参赛选手的编程技能,还可以拓宽他们的视野,了解计算机科学与技术领域的最新动态和发展趋势。
通过参加蓝桥杯的比赛,参赛选手可以结识志同道合的朋友,与他们共同探讨问题,交流经验,共同进步。
第二篇示例:蓝桥杯是中国首个面向大学生的计算机程序设计和算法竞赛,有A、B、C、D四个组别,其中B组使用C语言进行比赛。
蓝桥杯B组的比赛题目涵盖了C语言的基础知识、算法和数据结构等方面,旨在考察参赛选手的编程能力和解决问题的能力。
第七届蓝桥杯省赛c语言试题及答案第七届蓝桥杯省赛C语言试题及答案1. 题目一:计算圆的面积要求:编写一个程序,输入圆的半径,计算并输出圆的面积。
答案:```c#include <stdio.h>#define PI 3.14159int main() {float radius, area;printf("请输入圆的半径: ");scanf("%f", &radius);area = PI * radius * radius;printf("圆的面积是: %.2f\n", area);return 0;}```2. 题目二:字符串反转要求:编写一个函数,实现字符串的反转。
答案:```c#include <stdio.h>#include <string.h>void reverseString(char *str) {int i, j;char temp;for(i = 0, j = strlen(str) - 1; i < j; i++, j--) {temp = str[i];str[i] = str[j];str[j] = temp;}}int main() {char str[100];printf("请输入一个字符串: ");scanf("%s", str);reverseString(str);printf("反转后的字符串是: %s\n", str);return 0;}```3. 题目三:寻找最大值要求:编写一个程序,输入10个整数,找出并输出其中的最大值。
答案:```c#include <stdio.h>int main() {int numbers[10], max;printf("请输入10个整数:\n");for(int i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}max = numbers[0];for(int i = 1; i < 10; i++) {if(numbers[i] > max) {max = numbers[i];}}printf("最大值是: %d\n", max);return 0;}```4. 题目四:计算阶乘要求:编写一个函数,计算并返回一个整数的阶乘。
第七届蓝桥杯CC++B组省赛题⽬——⽅格填数第⼀部分:题⽬⽅格填数如下的10个格⼦+--+--+--+| | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显⽰有问题,也可以参看下图)填⼊0~9的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对⾓都算相邻)⼀共有多少种可能的填数⽅案?请填写表⽰⽅案数⽬的整数。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
第⼆部分:思路这个题⽬有点表述不明,不知道0~9 可不可以重复使⽤。
现在看来是不能重复使⽤的。
我的做法是把表格当做3⾏4列的数组,去掉⼀头⼀尾。
步骤:填数字->判断是否满⾜要求:相邻位置数字不能相邻。
需要注意的地⽅:保证数字没有重复使⽤:借助数组take,存储使⽤的数字,当所要填写的数字不在数组中时才可以填⼊。
填⼊后存进数组。
判断是否满⾜相邻位置数字不能相邻的要求。
看代码注释。
答案是:1580第三部分:代码#include<stdio.h>#include<stdlib.h>int count=0;int take[10],index=0;//记录当前已经填⼊的数字,⽤于填数字前判断是否已经使⽤,避免重复使⽤int is_legal(int s[3][4])//判断是否满⾜要求:相邻位置数字不能相邻,就是两数字的差⼤于1.就是为什么s[0][0]、s[2][3]置为-2;{//这⾥的判断⽅法有点死板。
假设每个位置都有上下左右和对⾓,只需要判断这些位置//是不是在数组中,在就进⾏⽐较,不在就说明没有。
for(int i=0;i<3;i++){for(int j=0;j<4;j++){if(j-1>=0){if(abs(s[i][j]-s[i][j-1])==1){return0;}}if(j+1<4){if(abs(s[i][j]-s[i][j+1])==1){return0;}}if(i+1<3){if(abs(s[i][j]-s[i+1][j])==1){return0;}}if(j-1>=0&&i+1<3){if(abs(s[i][j]-s[i+1][j-1])==1){return0;}}if(j+1<4&&i+1<3){if(abs(s[i][j]-s[i+1][j+1])==1){return0;}}if(i-1>=0&&j+1<4){if(abs(s[i][j]-s[i-1][j+1])==1){return0;}}if(i-1>=0){if(abs(s[i][j]-s[i-1][j])==1){return0;}}if(j-1>=0&&i-1>=0){if(abs(s[i][j]-s[i-1][j-1])==1){return0;}}}}return1;}void fun(int s[3][4],int a,int b){int i;if(a==2&&b==3)//表⽰当前已经填满了表格,需要进⾏判断看是否满⾜要求{if(is_legal(s)){count++;}}else//继续填写{for(i=0;i<=9;i++){int j;for(j=0;j<index;j++)//填写的数字必须是没有⽤过的{if(i==take[j]){break;}}if(j==index){s[a][b]=i;take[index++]=i;if(b<3)//表⽰当前⾏还没填完{fun(s,a,b+1);}else//当前⾏填完就从下⼀⾏开始{if(a<2)//判断当前⾏是否是最后⼀⾏{fun(s,a+1,0);}}index--;//在⼀次填满结束后,当前位置的数字换为其他可以填写的数字 //所以当前使⽤的数字需要出去。
第七届蓝桥杯省赛c组试题及答案第七届蓝桥杯省赛C组试题及答案1. 题目一:计算圆周率要求:编写一个程序,使用蒙特卡洛方法计算圆周率π的近似值。
解答:```pythonimport randomdef calculate_pi(num_samples):inside_circle = 0for _ in range(num_samples):x, y = random.random(), random.random()if x*x + y*y <= 1:inside_circle += 1return 4 * inside_circle / num_samplesprint(calculate_pi(1000000))```2. 题目二:字符串反转要求:编写一个函数,实现字符串反转的功能。
解答:```pythondef reverse_string(s):return s[::-1]print(reverse_string("hello"))```3. 题目三:寻找最大子数组和要求:给定一个整数数组,请找出其最大子数组和。
解答:```pythondef max_subarray_sum(nums):max_sum = nums[0]current_sum = nums[0]for num in nums[1:]:current_sum = max(num, current_sum + num)max_sum = max(max_sum, current_sum)return max_sumprint(max_subarray_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4])) ```4. 题目四:判断回文链表要求:给定一个链表,判断其是否为回文结构。
解答:```pythonclass ListNode:def __init__(self, value=0, next=None):self.val = valueself.next = nextdef is_palindrome(head):fast = slow = headprev = Nonewhile fast and fast.next:fast = fast.next.nextnext_node = slow.nextslow.next = prevprev = slowslow = next_nodeif fast:slow = slow.nextleft = headright = prevwhile left and right:if left.val != right.val: return Falseleft = left.nextright = right.nextreturn True# 示例链表构建和调用node1 = ListNode(1)node2 = ListNode(2)node3 = ListNode(2)node4 = ListNode(1)node1.next = node2node2.next = node3node3.next = node4print(is_palindrome(node1))```5. 题目五:二叉树的镜像要求:请完成一个函数,实现二叉树的镜像。
蓝桥杯初赛b组试题————————————————————————————————作者:————————————————————————————————日期:第一题结果填空3‘奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。
某抽奖活动的奖券号码是5位数(10-99),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
-题解:考试的时候写了个回溯法,然后屁颠屁颠的开始做下面一题了。
结果错了→_→1 #include <iostream>2using namespace std;3bool fuck(int t)4 {5while(t)6 {7if(t%10==4)return false;8 t/=10;9 }10return true;11 }12int main()13 {14int ans = 0, t = 10;15while(t<100)16if(fuck(t++))ans++;17 cout<<ans<<endl;18return0;19 }第一题正确答案:52488(我居然上来第一题就错了居然写了13440→_→)//cout<<8*9*9*9*9; →_→第二题结果填空5‘星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1天,请你计算它爆炸的准确日期。
请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。
比如:2015-02-19 请严格按照格式书写。
java蓝桥杯b组题目
Java蓝桥杯B组题目是指蓝桥杯全国软件和信息技术专业人才
大赛的B组Java题目。
蓝桥杯是中国最具影响力的计算机竞赛之一,旨在选拔和培养优秀的计算机人才。
每年的蓝桥杯比赛都会发布一系列的题目,其中包括了不同难
度和类型的题目,涵盖了计算机科学与技术的各个方面。
B组题目
主要面向大学本科及以下学生,难度适中。
由于蓝桥杯竞赛的题目每年都会更新,所以具体的B组题目会
根据比赛年份而有所不同。
以下是一些可能出现的B组题目类型:
1. 算法题,要求学生设计和实现特定的算法,如排序算法、查
找算法、图算法等。
2. 编程题,要求学生使用Java语言编写程序,解决实际问题,如字符串处理、数学计算、模拟等。
3. 数据结构题,要求学生使用合适的数据结构来解决问题,如栈、队列、链表、树等。
4. 网络编程题,要求学生使用Java网络编程知识,实现网络通信、客户端-服务器模型等。
5. 图形界面题,要求学生使用Java图形界面库,设计和实现用户友好的界面,完成特定功能。
以上只是一些可能的题目类型,具体的题目内容会根据比赛年份和主题而有所不同。
参赛选手需要具备扎实的Java编程基础,熟悉常用的算法和数据结构,并且具备一定的问题解决能力和编程实践经验。
希望以上回答能够满足你的需求。
如果你有更具体的问题或需要更详细的回答,请随时提出。
第七届蓝桥杯C/C++程序设计大学B组省赛题目第一题:煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
第二题:生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
第三题:凑算式B DEFA + --- + ------- = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
第四题:快速排序排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
#include <stdio.h>void s a[], int i, int j){int t = a[i];a[i] = a[j];a[j] = t;}int partition(int a[], int p, int r){int i = p;int j = r + 1;int x = a[p];while(1){while(i<r && a[++i]<x);while(a[--j]>x);if(i>=j) break;s);}______________________;return j;}void quicksort(int a[], int p, int r){if(p<r){int 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; i<N; i++) printf("%d ", a[i]);printf("\n");return 0;}注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
java蓝桥杯b组题目
摘要:
1.Java 编程语言简介
2.蓝桥杯B 组题目概述
3.Java 蓝桥杯B 组题目的解题思路和方法
4.总结
正文:
一、Java 编程语言简介
Java 是一种广泛使用的计算机编程语言,它具有跨平台性、安全性、简单性、面向对象等特点,被广泛应用于企业级应用开发、桌面应用、移动应用和Web 开发等领域。
Java 语言的特性使得它在全球范围内拥有大量的开发者社区,成为当今世界最流行的编程语言之一。
二、蓝桥杯B 组题目概述
蓝桥杯是中国的一项全国性计算机科学比赛,每年举办一次,吸引了来自全国各地的大量高校和中学生参加。
蓝桥杯比赛按照参赛选手的年级和水平分为A 组、B 组和C 组。
B 组是针对高中生举办的比赛,主要考察选手的计算机编程能力。
三、Java 蓝桥杯B 组题目的解题思路和方法
对于Java 蓝桥杯B 组题目,解题的关键在于深入理解Java 编程语言的基本语法和面向对象编程的思想,熟练掌握Java 的常用类库和API,以及灵活运用数据结构和算法。
在解题过程中,需要注意以下几点:
1.仔细阅读题目,理解题目要求和约束条件,确定解题思路。
2.编写代码时,要注重代码的可读性和可维护性,遵循Java 编码规范。
3.在编写程序时,要充分考虑边界条件和异常情况,保证程序的健壮性。
4.在解决复杂问题时,可以采用分治、动态规划等算法思想,提高程序的效率。
四、总结
Java 蓝桥杯B 组题目是针对高中生举办的计算机编程比赛,对于提高选手的编程能力和解决实际问题的能力有重要意义。
第一题煤球数目有一堆煤球;堆成三角棱锥形..具体:第一层放1个;第二层3个排列成三角形;第三层6个排列成三角形;第四层10个排列成三角形;....如果一共有100层;共有多少个煤球请填表示煤球总数目的数字..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这道题坑死了;第一次看堆成三角棱锥形;草稿本画半天都没画出个三角棱锥..后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥..我去..看懂题目这个题目就很简单了;每层的个数是上层的个数加上层数;意思就是An = An-1 + n;然而题目是求的前100层一共多少煤球..所以是Sn.代码双重for循环就出来了..答案是:1717001.include<stdio.h>2.int main3.{4.int a101 ={0};5.for int i = 1 ; i < 101 ; i ++6. ai = ai-1 + i;7.int ans = 0;8.for int j = 1 ; j < 101 ; j ++9. ans += aj;10. printf"%d\n";ans;11.return 0;12.}第二题:生日蜡烛某君从某年开始每年都举办一次生日party;并且每次都要吹熄与年龄相同根数的蜡烛..现在算起来;他一共吹熄了236根蜡烛..请问;他从多少岁开始过生日party的请填写他开始过生日party的年龄数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..呵呵;水题;但是出题人不严谨啊怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了..蓝桥杯这种不像acm的题目的;能暴力直接暴力..不用想太多..直接从1~236 枚举 start; end 分别表示他开始过生日的年龄和今年的年龄;然后计算之间吹蜡烛的总和如果等于236就输出start ;end. 答案是:261.include<stdio.h>2.int main3.{4.int start;end;5.for start = 1 ; start < 236 ; start ++6. {7.for end = start ; end < 236 ; end ++8. {9.int sum = 0;10.for int i = start; i <= end; i ++11. sum += i;12.if sum == 23613. {14. printf"start : %dend : %d\n";start;end;15. }16. }17. }18.return 0;19.}第三题:凑算式B DEFA + — + -——— = 10C GHI如果显示有问题;可以参见图1.jpg这个算式中A~I代表1~9的数字;不同的字母代表不同的数字..比如:6+8/3+952/714 就是一种解法;5+3/1+972/486 是另一种解法..这个算式一共有多少种解法注意:你提交应该是个整数;不要填写任何多余的内容或说明性文字..这个题不多说了;直接暴力生成9的全排列然后去验证等式是否成立;只是验证的时候如果防止精度问题可以通分把除法变成乘法..答案是:291.include<stdio.h>2.int ans = 0;3.int num10;4.bool visit10;5.6.void Solve7.{8.double sum = num0 + double num1 / num2 + double num3100+num410+num5/num6100+num710+num8;9.if sum == 1010. {11. ans ++;12. }13.}14.15.void dfs int index16.{17.if index == 918. {19. Solve;20.return ;21. }22.for int i = 1 ; i < 10 ; i ++23. {24.if visiti25. {26. visiti = true;27. numindex = i;28. dfsindex+1;29. visiti = false;30. }31. }32.}33.34.int main35.{36. dfs0;37. printf"%d\n";ans;38.return 0;39.}第四题:快速排序排序在各种场合经常被用到..快速排序是十分常用的高效率的算法..其思想是:先选一个“标尺”;用它把整个队列过一遍筛子;以保证:其左边的元素都不大于它;其右边的元素都不小于它..这样;排序问题就被分割为两个子区间..再分别对子区间排序就可以了..下面的代码是一种实现;请分析并填写划线部分缺少的代码.. include <stdio.h>void swapint a; int i; int j{int t = ai;ai = aj;aj = t;}int partitionint a; int p; int r{int i = p;int j = r + 1;int x = ap;whilei<r && a++i<x;whilea--j>x;ifi>=j break;swapa;i;j;}______________________;return j;}void quicksortint a; int p; int r {ifp<r{int q = partitiona;p;r; quicksorta;p;q-1;quicksorta;q+1;r;}}{int i;int a = {5;13;6;24;2;8;19;27;6;12;1;17};int N = 12;quicksorta; 0; N-1;fori=0; i<N; i++ printf"%d "; ai;printf"\n";return 0;}注意:只填写缺少的内容;不要书写任何题面已有代码或说明性文字..这个题目如果接触过快排;了解过快速排序的原理的应该是送分题目;只不过快排单步就是将一堆数按照某个数作为基准数分成左右两堆这个实现方式有几种代码表现..在这里答案是swapa;p;j.第五题:抽签X星球要派出一个5人组成的观察团前往W星..A国最多可以派出4人..B国最多可以派出2人..C国最多可以派出2人......那么最终派往W星的观察团会有多少种国别的不同组合呢下面的程序解决了这个问题..数组a 中既是每个国家可以派出的最多的名额..程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....以下省略;总共101行include <stdio.h>define N 6define M 5define BUF 1024void fint a; int k; int m; char b {int i;j;ifk==N{ifm==0 printf"%s\n";b;return;}fori=0; i<=ak; i++{forj=0; j<i; j++ bM-m+j = k+'A';______________________; //填空位置}}int main{int aN = {4;2;2;1;1;3};char bBUF;fa;0;M;b;return 0;}仔细阅读代码;填写划线部分缺少的内容..注意:不要填写任何已有内容或说明性文字..这个题目是这样的;对于fint a;int k;int m;char b.a 是每个国家的最多指派人数;k表示当前是哪个国家;m表示还需要派送几个人可以为负数.b表示已经派送的人的字符串..所以这个题目在递归中间的的第一个循环表示从0~ai中让i国选择指派人数;内循环只是向b记录的过程..所以答案是fa;k+1;m-i;b. 因为这里I = j .应该 fa;k+1;m-j;b 也可以..第六题:方格填数如下的10个格子如果显示有问题;也可以参看图1.jpg填入0~9的数字..要求:连续的两个数字不能相邻..左右、上下、对角都算相邻一共有多少种可能的填数方案请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这个题目题目有点表述不明;不知道0~9 可不可以重复使用..我当时做的时候是当作不可以重复使用来处理的..那么这里我就先当作不可重复使用来讲解..这里题目还是一样先往里面填数..用生成排列的形式..填写完了之后再判断是否可行..答案是:15801.include <stdio.h>2.include <math.h>3.int flag34; //表示哪些可以填数4.int mpt34; //填数5.bool visit10;6.int ans = 0;7.void init //初始化8.{9.int i;j;10.for i = 0 ; i < 3 ; i ++11.for j = 0 ; j < 4 ; j ++12. flagij = 1;13. flag00 = 0;14. flag23 = 0;15.}16.17.void Solve18.{19.int dir82 ={ 0;1;0;-1;1;0;-1;0;1;1;1;-1;-1;1;-1;-1};20.int book = true;21.for int i = 0 ; i < 3 ; i ++22. {23.for int j = 0 ; j < 4; j ++24. {25.//判断每个数周围是否满足26.if flagij == 0continue;27.for int k = 0 ; k < 8 ; k ++28. {29.int x;y;30. x = i + dirk0;31. y = j + dirk1;32.if x < 0 || x >= 3 || y < 0 || y >= 4 || flagxy == 0 continue;33.if absmptxy - mptij == 1 book = false;34. }35. }36. }37.if book ans ++;38.}39.40.41.void dfs int index42.{43.int x;y;44. x = index / 4;45. y = index % 4;46.if x == 347. {48. Solve;49.return;50. }51.if flagxy52. {53.for int i = 0 ; i < 10 ; i ++54. {55.if visiti56. {57. visiti = true;58. mptxy = i;59. dfsindex+1;60. visiti = false;61. }62. }63. }64.else65. {66. dfsindex+1;67. }68.}69.int main70.{71. init;72. dfs0;73. printf"%d\n";ans;74.return 0;75.}第七题:剪邮票如图1; 有12张连在一起的12生肖的邮票..现在你要从中剪下5张来;要求必须是连着的..仅仅连接一个角不算相连比如;图2;图3中;粉红色所示部分就是合格的剪取..请你计算;一共有多少种不同的剪取方法..请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..其实这个题目还是可前面的一样;先生成;再判断是否可行..这里我们可以先用搜索从12个数里面将所有5个数的组合找出来..然后再用深搜判断这五个是否连在一起..答案是:1161.include <stdio.h>2.include <string.h>3.int mpt34;4.int mpt_visit34;5.int num6;6.int have13;7.int visit13;8.int ans = 0;9.int Count = 0;10.11.void init12.{13.int k = 1;14.for int i = 0 ; i < 3 ; i ++15.for int j = 0 ; j < 4 ; j ++16. {17. mptij = k;18. k ++;19. }20.}21.int dir42 = {0;1;0;-1;-1;0;1;0};22.//判断五个数是否能连在一起23.void dfs_find int x;int y24.{25.for int i = 0 ; i < 4 ; i++26. {27.int tx;ty;28. tx = x + diri0;29. ty = y + diri1;30.if tx < 0 || tx >= 3 || ty < 0 || ty >= 4 continue;31.if havempttxty == 0 || mpt_visittxty continue;32. mpt_visittxty = 1;33. Count ++;34. dfs_findtx;ty;35. }36.}37.38.void Solve39.{40.int i;41. memsethave;0;sizeof have;42. memsetmpt_visit;0;sizeof mpt_visit;43.for i = 1; i < 6 ; i ++ havenumi = 1;44.for i = 0 ; i < 12 ; i ++45. {46.int x;y;47. x = i / 4;48. y = i % 4;49.if havemptxy50. {51. Count = 1;52. mpt_visitxy =1;53. dfs_findx;y;54.break;55. }56. }57.if Count == 558. {59. ans ++;60. }61.}62.63.//创建5个数的组合64.void dfs_creat int index65.{66.if index == 667. {68. Solve;69.return;70. }71.for int i = numindex-1 + 1; i < 13 ; i ++72. {73.if visiti74. {75. visiti = true;76. numindex = i;77. dfs_creatindex+1;78. visiti = false;79. }80. }81.}82.83.int main84.{85. init;86. dfs_creat1;87. printf"%d\n";ans;88.return 0;89.}第八题:四平方和四平方和定理;又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和..如果把0包括进去;就正好可以表示为4个数的平方和..比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2^符号表示乘方的意思对于一个给定的正整数;可能存在多种平方和的表示法..要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a;b;c;d 为联合主键升序排列;最后输出第一个表示法程序输入为一个正整数N N<5000000要求输出4个非负整数;按从小到大排序;中间用空格分开例如;输入:5则程序应该输出:0 0 1 2再例如;输入:12则程序应该输出:0 2 2 2再例如;输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目很水也是搜索能做的..但是有点技巧;这里我贡献两个方法给大家参考..方法一:On^3/2.先暴力枚举前三个数然后做减法判断差是否为一个完全平方数即可..当然虽然这个题目是n^3/2看数据貌似过不了..但是貌似我找了几组数据都能秒出结果..应该是绝大多数最外层循环都不会太多..1.include <stdio.h>2.include <math.h>3.int main4.{5.int n;6.int flag = false;7. scanf"%d";&n;8.for int i = 0 ; i i <= n ; i ++9. {10.for int j = 0 ; j j <= n ; j ++{11.for int k = 0 ; k k <= n ; k ++12. {13.int temp = n - ii - jj - kk;14.double l = sqrt double temp;15.if l == int l16. {17.printf"%d %d %d %d\n";i;j;k;int l;18. flag = true;19.break;20. }21. }22.if flag break;23. }24.if flag break;25. }26.return 0;27.}方法二:On 的方法..这个方法是我在比赛的时候用的..先把两个平方数能相加的到的数字球出来然后记录..这样我们第三层循环就可以先判断再循环了..1.include <stdio.h>2.include <math.h>3.int mpt5000010 ={0}; //mpti = 1表示i 能够用两个完全平方数相加而得..4.int n;5.void init6.{7.for int i = 0 ; ii <= n ; i ++8.for int j = 0 ; jj <=n ; j ++9.if ii+jj <= n mptii+jj = 1;10.}11.int main12.{13.15. scanf"%d";&n;16. init;17.for int i = 0 ; i i <= n ; i ++18. {19.for int j = 0 ; j j <= n ; j ++{20.if mptn - ii - jj == 0 continue; //如果剩下的差用两个完全平方数不能组合出来就不继续21.for int k = 0 ; k k <= n ; k ++22. {23.int temp = n - ii - jj - kk;24.double l = sqrt double temp;25.if l == int l26. {27.printf"%d %d %d %d\n";i;j;k;int l;28. flag = true;29.break;30. }31. }32.if flag break;33. }35. }36.return 0;37.}第九题:交换瓶子有N个瓶子;编号 1 ~ N;放在架子上..比如有5个瓶子:2 13 5 4要求每次拿起2个瓶子;交换它们的位置..经过若干次后;使得瓶子的序号为:1 2 3 4 5对于这么简单的情况;显然;至少需要交换2次就可以复位..如果瓶子更多呢你可以通过编程来解决..输入格式为两行:第一行: 一个正整数NN<10000; 表示瓶子的数目第二行:N个正整数;用空格分开;表示瓶子目前的排列情况..输出数据为一行一个正整数;表示至少交换多少次;才能完成排序..例如;输入:53 1 2 5 4程序应该输出:3再例如;输入:55 4 3 2 1程序应该输出:2资源约定:峰值内存消耗 < 256MCPU消耗 < 1000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..啊啊这个题目最开始没看到最上面的那句话;以为输入的数字是随意的int.还做了离散化处理..后来看到了编号为1~n就觉得自己傻逼了..这个题目我用的贪心;从左向右如果当前第i个瓶子编号不是i就把编号为i的瓶子换过来..自己yy几发数据貌似都能过..不清楚是否对..因为这里的n规模为10000;如果在交换的时候去用for找编号为i的瓶子在哪儿时间复杂度为On^2会超时..所以这里要用两个数组;一个数组是记录第i个瓶子编号为多少;一个是记录编号为i的瓶子在哪儿..注意我们在交换的时候要把这两个数组都维护1.include <stdio.h>2.include <math.h>3.int arr10010;4.int flag10010;5.int main6.{7.int ans = 0;8.int n;i;9. scanf"%d";&n;10.for i = 1 ; i <= n ; i ++ scanf"%d";&arri;11.for i = 1 ; i <= n ; i ++ flagarri = i;12.for i = 1 ; i <= n ; i ++13. {14.if i = arri15. {16.int x = arri;17. arri ^= arrflagi ^= arri ^= arrflagi;18. flagi ^= flagx ^= flagi ^= flagx;19. ans ++;20. }21. }22. printf"%d\n";ans;23.return 0;24.}第十题:最大比例X星球的某个大奖赛设了M级奖励..每个级别的奖金是一个正整数..并且;相邻的两个级别间的比例是个固定值..也就是说:所有级别的奖金数构成了一个等比数列..比如:16;24;36;54其等比值为:3/2现在;我们随机调查了一些获奖者的奖金数..请你据此推算可能的最大的等比值..输入格式:第一行为数字N;表示接下的一行包含N个正整数第二行N个正整数XiXi<1 000 000 000 000;用空格分开..每个整数表示调查到的某人的奖金数额要求输出:一个形如A/B的分数;要求A、B互质..表示可能的最大比例系数测试数据保证了输入格式正确;并且最大比例是存在的..例如;输入:31250 200 32程序应该输出:25/4再例如;输入:43125 32 32 200程序应该输出:5/2再例如;输入:3程序应该输出:4/1资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目刚开始没准备做后来感觉时间蛮充裕的上次吃了时间的亏这次自己吧时间卡的比较死;一个小时做完了填空题;一个半小时做完了前面两道大题..所以还剩下一个半小时.想了一会儿感觉这个题可做..自己YY了一下..不保证一定正确;可以当作一个参考这个题目意思是相邻两个等级的奖金比例一定是一个相同的分数PP = A/B; A/B为最简分数.题目告诉了你n个人分别领取了多少奖金..让你算这个P最大为多少..我是这么处理的;我们先把n个人的奖金从大到小排序..剔除掉相同的相同的奖金只保留一个..然后前后做除用分数的形式保留前后两个数的比例..如何用分数表示两个数的最简分数呢..例如 A / B = A/GcdA;B / B/GcdA;B..只要把A;B最大公约数去除掉就可以了..现在得到了一堆堆分数Fsi然后怎么处理呢我们知道这些分数一定都满足一个条件就是 Fsi = P^ki 这里的ki是不定的..但是要使得求得P最大;那么一定是所有 ki 求最大公约数得到k' .结果就是 Pk'. 然而这道题数据太大了;并不容易求出这些分数对应的底数以及各自的指数..那么这个方案就不可取了..所以我们要的到结果并不能先求出k‘.但是我们看我们能不能直接求出P^k'. 这里我们先把分子分母分开处理..因为A/B是最简分数.. P^k' = A^k' / B^k'.我们先求A^k' .不知道大家还记不记得欧几里得游戏..这个游戏是这样的..黑板上有两个不同的正整数n;m..现在两个人轮流在黑板上写一个正整数要求这个正整数必须为黑板上某两个数的差并且没有在黑板上出现过..当某人无法再写下一个数的时候游戏结束..其实最后这个游戏本质就是看黑板上最多能写多少个数..事实上我们知道黑板上能写的数都是最开始两个数的最大公约数的倍数..所以黑板上最小的数也就是m;n的最大公约数..这里我们来看;假如我们先求A^k1;A^k2 指数对应的最大公约数..我们吧这个两个数做除法..发现为 A^k1-k2..发现是不是这个题目就转化为欧几里得游戏的填数游戏了..只不过加法改成了除法..所以当出发找到一个没有出现过的商的时候这些数种最小的就是当前的A^k'.然后依次对剩下的A^ki做相同操作就可以得到最终的A^ki;同样可以得到B^ki.最后输出 A^ki/B^ki即可..1.include <stdio.h>2.include <algorithm>3.include <queue>ing namespace std;5.define LL long long6.struct fs7.{8. LL up;down;9.};10.int n;11.LL arr110;12.fs Fs110;13.14.bool cmpLL a;LL b15.{16.return a > b;17.}18.19.LL GcdLL a;LL b20.{21.if b == 0 return a;22.return Gcdb;a%b;23.}24.LL GetLL a; LL b25.{26.if a < b a ^= b ^= a ^= b;27. LL v30;28. queue<LL>team;29.if a == b || a / b == a return b;30. v0 = a; v1 = b;31. v2 = a / b;32.int top = 3;i;j;33. team.pusha/b;34.while team.size35. {36. LL now = team.front;37. team.pop;38.for i = 0 ; i < top ; i ++39. {40. LL temp = vi > now vi / now : now / vi;41.bool find = false;42.for j = 0 ; j < top ; j ++43.if vj == temp find = true;44.if find == true continue;45. team.pushtemp;46. vtop++ = temp;47. }48. }49. LL ans = v0;50.for i = 0 ; i < top ; i ++51.if vi = 152. {53. ans = vi;54.break;55. }56.for i = 0 ; i < top ; i ++57.if vi < ans && vi = 1 ans = vi;58.return ans;59.}60.int main61.{62.int i;j;63. scanf"%d";&n;64.for i = 0 ; i < n ; i ++ scanf"%lld";&arri;65. sortarr;arr+n;cmp;66.int top = 1;67.for i = 1; i < n ; i ++68.if arri = arri-1 arrtop++ = arri;69. n = top;70.for i = 0 ; i < n - 1; i ++71. {72. LL gcd = Gcdarri;arri+1;73. Fsi.up = arri / gcd;74. Fsi.down = arri+1 / gcd;75. }76. LL x = Fs0.up;77.for i = 0 ; i < n - 1 ; i ++78. x = Getx;Fsi.up;79. LL y = Fs0.down;80.for i = 0 ; i < n - 1; i ++81. y = Gety;Fsi.down;82. printf"%lld/%lld\n";x;y;83.return 0;84.}。
第七届蓝桥杯C语⾔B组题⽬之凑算式第⼀部分:题⽬凑算式B DEFA + --- + ------- = 10C GHI(如果显⽰有问题,可以参见下图)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
⽐如:6+8/3+952/714 就是⼀种解法,5+3/1+972/486 是另⼀种解法。
这个算式⼀共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性⽂字。
这个题不多说了,直接暴⼒⽣成9的全排列然后去验证等式是否成⽴,只是验证的时候如果防⽌精度问题可以通分把除法变成乘法。
答案是:29第⼆部分:思路(式⼦改成:a+b/c+m/n=10,其中,a,b,c都是⼀位数,m,n都是三位数。
总共10个数字,并且这些数是1~9.不能重复)暴⼒枚举。
a,b,c从1~9中⼀次选取,保证两两不相同即可。
利⽤数组take[10],来记录已取数字。
m,n从987到123选取。
根据take数组,判断m,n是否包含已取数字,同时判断m,n⾃⾝是否有重复数字。
满⾜这些条件的情况下,判断是否满⾜式⼦。
因为可能出现不能整除的情况,所以把式⼦变形,(b*n+c*m)/(c*n)=10-a,并且(b*n+c*m)%(c*m)=0;这就保证了式⼦的”合法性“。
第三部分:代码#include<stdio.h>int take[10],index=0;//⽤于记录当前已取数字int is_d(int n)//判断数字是不是有重复{ int s[10],i,j,l=0,o; while(n) { s[l++]=n%10; n/=10; } for(i=0;i<l;i++) { for(o=0;o<index;o++) { if(s[i]==take[o]||s[i]==0)//注意不包含0 { return0; } } for(j=i+1;j<l;j++) { if(s[i]==s[j]) { return0; } } } for(j=0;j<l;j++)//在枚举的数字满⾜条件的情况下,把数字加⼊已取数字数组 { take[index++]=s[j]; } return1;}int main(){ int a,b,c,m,n,count=0; for(a=1;a<=9;a++)//a从1~9枚举 { take[index++]=a; for(b=1;b<=9;b++) { if(b!=a) { take[index++]=b; for(c=1;c<=9;c++) { if(c!=a&&c!=b) { take[index++]=c; for(m=987;m>=123;m--) { if(is_d(m)) { for(n=987;n>=123;n--) { if(is_d(n)) { //判断是否满⾜式⼦要求,变形 if((b*n+c*m)/(c*n)==10-a&&(b*n+c*m)%(c*n)==0) { printf("%d+%d/%d+%d/%d=10\n",a,b,c,m,n); count++; } index-=3;//在进⾏下⼀次枚举前,把当前数字删除 } } index-=3; } } index--; } } index--; } } index--; } printf("%d\n",count); return0;}不⾜之处还望指教。
第七届蓝桥杯程序设计大学B组省赛题目第一题:煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
第二题:生日蜡烛某君从某年开始每年都举办一次生日,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日的?请填写他开始过生日的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
第三题:凑算式BA + + = 10C(如果显示有问题,可以参见【图1】)这个算式中代表1~9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
第四题:快速排序排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
<>( a[], i, j){t = a[i];a[i] = a[j];a[j] = t;}( a[], p, r){i = p;j = r + 1;x = a[p];(1){(i<r a[]<x);(a[]>x);(i>) ;();};j;}( a[], p, r){(p<r){q = ();(1);(1);}}(){i;a[] = {5,13,6,24,2,8,19,27,6,12,1,17};N = 12;(a, 0, 1);(0; i<N; ) (" ", a[i]);("\n");0;}注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
第五题:抽签X星球要派出一个5人组成的观察团前往W星。
其中:A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
....那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:....(以下省略,总共101行)<>N 6M 51024f( a[], k, m, b[]){;(){b[M] = 0;(0) ("\n");;}(0; i<[k]; ){(0; j<i; ) b[] = 'A';; 填空位置}}(){a[N] = {4,2,2,1,1,3};b[];f(a,0);0;}仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。
第六题:方格填数如下的10个格子| | | || | | | || | | |(如果显示有问题,也可以参看【图1】)填入0~9的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
第七题:剪邮票如【图1】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)比如,【图2】,【图3】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
第八题:四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。
比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按为联合主键升序排列,最后输出第一个表示法程序输入为一个正整数N (N<5000000)要求输出4个非负整数,按从小到大排序,中间用空格分开例如,输入:5则程序应该输出:0 0 1 2再例如,输入:12则程序应该输出:0 2 2 2再例如,输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256M消耗 < 3000请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: 函数需要返回0注意: 只使用标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 <>,不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
第九题:交换瓶子有N个瓶子,编号 1 ~ N,放在架子上。
比如有5个瓶子:2 13 5 4要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:1 2 3 4 5对于这么简单的情况,显然,至少需要交换2次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入格式为两行:第一行: 一个正整数N(N<10000), 表示瓶子的数目第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。
例如,输入:53 1 2 5 4程序应该输出:3再例如,输入:55 4 3 2 1程序应该输出:2资源约定:峰值内存消耗 < 256M消耗 < 1000请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: 函数需要返回0注意: 只使用标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 <>,不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
第十题:最大比例X星球的某个大奖赛设了M级奖励。
每个级别的奖金是一个正整数。
并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。
比如:16,24,36,54其等比值为:3/2现在,我们随机调查了一些获奖者的奖金数。
请你据此推算可能的最大的等比值。
输入格式:第一行为数字N,表示接下的一行包含N个正整数第二行N个正整数(<1 000 000 000 000),用空格分开。
每个整数表示调查到的某人的奖金数额要求输出:一个形如的分数,要求A、B互质。
表示可能的最大比例系数测试数据保证了输入格式正确,并且最大比例是存在的。
例如,输入:31250 200 32程序应该输出:25/4再例如,输入:43125 32 32 200程序应该输出:5/2再例如,输入:3549755813888 524288 2程序应该输出:4/1资源约定:峰值内存消耗 < 256M消耗 < 3000请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: 函数需要返回0注意: 只使用标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 <>,不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。