蓝桥杯java和c语⾔区别_C语⾔蓝桥杯⽐赛原题和解析
蓝桥杯:在计算机编程领域,是具有⼀定含⾦量的竞赛,⽤于选拔信息技术⼈才。
⼀般分为多个领域,其中包含了C/C#/C++/Java/Python等编程语⾔的测试题,多为算法的设计题。
下⾯,在搜题过程中,整理了⼀些⽐较有意思的原题,⽤于提⾼算法设计技巧。
注意:这⾥给出的答案不唯⼀,且为C/C++试题及解析!
题⽬:
第⼀题:煤球数⽬
有⼀堆煤球,堆成三⾓棱锥形。具体:
第⼀层放1个,
第⼆层3个(排列成三⾓形),
第三层6个(排列成三⾓形),
第四层10个(排列成三⾓形),
....
如果⼀共有100层,共有多少个煤球?
请填表⽰煤球总数⽬的数字。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
读懂出题者的意图和考察⽬标:
1、能不能识破递推规律。显然,这是⼀个递推(数列)类型的问题。
2、是否掌握递推法。基本递推法是:后⼀项是前⾯若⼲项的计算。
3、是否掌握递推法的C语⾔的实现。程序=算法+数据。这个问题的算法,是⼀个简单的for循环。这个问题中的数据是整型,但是,有些问题的计算过程和计算结果是浮点型。所以,在这⼀点要特别⼩⼼。每次期末考试,很多⼈都因为这个原因⽽扣分。
4、是否具有细节观察和理解能⼒。“⼀堆煤球”、“三⾓棱锥形”,“请填表⽰煤球总数⽬的数字”、“注意:
你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字”,等等,这些都需要考⽣具有很好的细节观察和理解能⼒。每次考试时,总是看到有些考⽣不按照规定答题。
5、是否具有基本的⾼中数学功底。“有⼀堆煤球,堆成三⾓棱锥形”,这是⼀个⽴体的棱锥,题⽬还特意地在下⾯强调,“第⼆层3个(排列成三⾓形)”、“第三层6个(排列成三⾓形)”……。
源代码:
1 #include
2 intmain()c语言和c++区别
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的年龄数。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
读懂出题者的意图和考察⽬标:
1、这同样是⼀个递推问题。
2、递推⽅法。有变化:有限制。
3、递推的实现。所以代码实现就要反映出这个变化来。
4、所以直接⽤枚举法。start, end分别表⽰他开始过⽣⽇的年龄和今年的年龄,然后计算之间吹蜡烛的总和,如果等于236就输出start, end.
源代码:
1 #include
2 intmain()
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 }
第三题:交换瓶⼦
有N个瓶⼦,编号1 ~ N,放在架⼦上。
⽐如有5个瓶⼦:
2 1
3 5 4
要求每次拿起2个瓶⼦,交换它们的位置。
经过若⼲次后,使得瓶⼦的序号为:
1 2 3 4 5
对于这么简单的情况,显然,⾄少需要交换2次就可以复位。
如果瓶⼦更多呢?你可以通过编程来解决。
输⼊格式为两⾏:
第⼀⾏:⼀个正整数N(N<10000),表⽰瓶⼦的数⽬
第⼆⾏:N个正整数,⽤空格分开,表⽰瓶⼦⽬前的排列情况。
输出数据为⼀⾏⼀个正整数,表⽰⾄少交换多少次,才能完成排序。
例如,输⼊:
5
3 1 2 5 4
程序应该输出:
3
再例如,输⼊:
5
5 4 3 2 1
程序应该输出:
2
资源约定:
峰值内存消耗< 256M
CPU消耗< 1000ms
请严格按要求输出,不要画蛇添⾜地打印类似:“请您输⼊...”的多余内容。
所有代码放在同⼀个源⽂件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意:只使⽤ANSI C/ANSI C++标准,不要调⽤依赖于编译环境或操作系统的特殊函数。
注意:所有依赖的函数必须明确地在源⽂件中#include ,不能通过⼯程设置⽽省略常⽤头⽂件。
提交时,注意选择所期望的编译器类型。
贪⼼法,从左向右如果当前第i个瓶⼦编号不是i就把编号为i的瓶⼦换过来。
因为这⾥的n规模为10000,如果在交换的时候去⽤for编号为i的瓶⼦在哪⼉时间复杂度为O(n^2)会超时。
所以这⾥要⽤两个数组,⼀个数组是记录第i个瓶⼦编号为多少,⼀个是记录编号为i的瓶⼦在哪⼉。注意我们在交换的时候要把这两个数组都维护!
源代码:
1 #include
2 #include
3 int arr[10010];
4 int flag[10010];
5 intmain()
6 {
7 int ans = 0;
8 intn,i;
9 scanf("%d",&n);10 for(i = 1 ; i <= n ; i ++)
scanf("%d",&arr[i]);11 for(i = 1 ; i <= n ; i ++ )flag[arr[i]] =i;12 for(i = 1 ; i <= n ; i ++)13 {14 if( i !=arr[i] )15 {16 int x
=arr[i];17 arr[i] ^= arr[flag[i]] ^= arr[i] ^=arr[flag[i]];18 flag[i] ^= flag[x] ^= flag[i] ^=flag[x];19 ans ++;20 }21 }22
printf("%d\n",ans);23 return 0;24 }25
⼩结:
1.在计算机编程中,数学是很重要的,数学⽤于算法的设计,要有很强的逻辑性,除了算法,其他的界⾯设计也要有⼀定的逻辑性(即不能反⼈类⾏为)。
2.在设计相关算法时,要充分理解题意,即条件桩和结果,如何优化算法等。
3.在学习编程的时候,编程语⾔(C/C#/C++/Java/Python)等它们之间是有相互联系的,主要是编程⼯具的开发环境,包和类,接⼝的部分区别,C语⾔是最基本的编程语⾔,即⼊门语⾔,新兴起的Python语⾔,是基于⼈⼯智能的编程语⾔,个⼈认为,Python语⾔是最简单易学的编程语⾔。因此,在编程语⾔的选择上,并不需要过度纠结它们的好坏,主要是了解核⼼算法,编程主要为算法设计,编程语⾔只是实现它的⼀种⽅式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论