2014年第五届蓝桥杯预赛题目及标准答案

合集下载

蓝桥杯1431:[蓝桥杯][2014年第五届真题]分糖果Easyonlyonce

蓝桥杯1431:[蓝桥杯][2014年第五届真题]分糖果Easyonlyonce
children[i] /= 2; surge[i] = children[i]; } for (int i = 0; i < n; i++) { children[i] += surge[(i + 1) % n]; if (children[i] % 2 != 0) { cnt++; children[i]++; } } } cout << cnt; //system("pause"); return 0; }
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
蓝桥杯 1431: [蓝桥杯 ][2014年第五届真题 ]分糖果 Easyonlyonce
基本思想:
水题,唯一值得启发的可能也就是传递糖果的过程只需要把最后一个提前保存给第一位小孩即可;
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<string> #include<math.h> #include<algorithm> #include<cstring> using namespace std; using std::vector; vector<int>children; vector<int>surge;
bool charge() { for (int i = 1; i < children.size(); i++) { if (children[i] != children[i - 1]) {

2014年第五届蓝桥杯预赛题目C、C++程序设计本科A组

2014年第五届蓝桥杯预赛题目C、C++程序设计本科A组

2014年预赛C/C++本科A组考生须知:●考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。

●考试时间为4小时。

时间截止后,提交答案无效。

●在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法继续提交或浏览答案。

●选手可浏览自己已经提交的答案。

被浏览的答案允许拷贝。

●对同一题目,选手可多次提交答案,以最后一次提交的答案为准。

●选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。

●选手必须通过浏览器方式提交自己的答案。

选手在其它位置的作答或其它方式提交的答案无效。

●试题包含三种类型:“结果填空”、“代码填空”与“程序设计”。

结果填空题:要求选手根据题目描述直接填写结果。

求解方式不限。

不要求源代码。

把结果填空的答案直接通过网页提交即可,不要书写多余的内容。

代码填空题:要求选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。

所填写的代码不超过一条语句(即中间不能出现分号)。

把代码填空的答案(仅填空处的答案,不包括题面已存在的代码或符号)直接通过网页提交即可,不要书写多余的内容。

使用ANSI C/ANSI C++ 标准,不要依赖操作系统或编译器提供的特殊函数。

程序设计题目:要求选手设计的程序对于给定的输入能给出正确的输出结果。

考生的程序只有能运行出正确结果才有机会得分。

注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。

选手的程序必须是通用的,不能只对试卷中给定的数据有效。

对于编程题目,要求选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库。

注意: main函数结束必须返回0注意: 所有依赖的函数必须明确地在源文件中#include <xxx>,不能通过工程设置而省略常用头文件。

2014蓝桥杯c语言试题及答案

2014蓝桥杯c语言试题及答案

2014蓝桥杯c语言试题及答案2014蓝桥杯是指中国中学生计算机设计大赛,是一个重要的计算机技能竞赛。

C语言作为计算机编程的基础语言,也是该竞赛的主要考核对象。

以下是2014蓝桥杯C语言试题及答案,希望对广大参赛选手有所帮助。

题目一:请编写一个C语言程序,输出1到100之间所有能被3和5同时整除的数。

答案一:```c#include <stdio.h>int main(){int i;for (i = 1; i <= 100; i++){if (i % 3 == 0 && i % 5 == 0){printf("%d ", i);}return 0;}```题目二:请编写一个C语言程序,实现计算一个整数的阶乘。

答案二:```c#include <stdio.h>int factorial(int n){if (n == 0){return 1;}else{return n * factorial(n - 1);}int main(){int num;printf("请输入一个整数:");scanf("%d", &num);int result = factorial(num);printf("%d的阶乘为:%d\n", num, result);return 0;}```题目三:请编写一个C语言程序,统计一个字符串中字母、数字和其他字符的个数。

答案三:```c#include <stdio.h>#include <ctype.h>int main(){char str[100];int i, alphabets = 0, digits = 0, others = 0; printf("请输入一个字符串:");fgets(str, sizeof(str), stdin);for (i = 0; str[i] != '\n'; i++){if (isalpha(str[i])){alphabets++;}else if (isdigit(str[i])){digits++;}else{others++;}}printf("字母个数:%d\n", alphabets);printf("数字个数:%d\n", digits);printf("其他字符个数:%d\n", others);return 0;}```题目四:请编写一个C语言程序,实现冒泡排序算法对一个整型数组进行从小到大排序。

2014第五届蓝桥杯JAVA本科B组试题及答案解析

2014第五届蓝桥杯JAVA本科B组试题及答案解析
if(arr[index] == true) { //当在圈里时
if(countNum%2 == 0) { //下标为偶数时
arr[index] = false; //该字母退出圈子
leftCount --; //剩余字母数目减一
} countNum++;
}
index ++; //每报一次数 下标加一
int n = sc.nextInt();
int num = (int)Math.pow(2, n) + 1;
System.out.println(num);
//结果:2015
}
}
3.猜字母把abcd...s共19个字母组成的序列重复拼接106次 得到长度为2014的串。接下来删除第1个字母 即开头的字母a以及第3个 第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去 最后只剩下一字母 请写出该字母。
2014第五届蓝桥杯JAVA本科B组试题及答案
1.武功秘籍小明到X山洞探险 捡到一本有破损的武功秘籍2000多页 当然是伪造的 。他意识到 书的第10页和第11页在同一张纸上 但第11页和第12页不在同一张纸上。
小明只想练习该书的第81页到第92页的武功 又不想带着整本书。请问他至少要撕下多少张纸带走
答案是个整数 考虑对称性 肯定是偶数 。请通过浏览器提交。不要书写多余的内容。
答案public class Main {
public static void main(String []args){
int count = 0;
for (int a = 1;a <= 9; a++){
见图1.png

2014蓝桥杯c试题校赛及答案

2014蓝桥杯c试题校赛及答案

2014蓝桥杯c试题校赛及答案2014蓝桥杯C试题校赛及答案1. 题目一:字符串反转给定一个字符串,请编写一个函数,实现字符串的反转。

答案:```cvoid reverseString(char *str) {int len = 0;while (str[len] != '\0') {len++;}for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}```2. 题目二:寻找最大值给定一个整数数组,请找出数组中的最大值。

答案:```cint findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```3. 题目三:计算阶乘编写一个函数,计算并返回一个非负整数的阶乘。

答案:```cunsigned long long factorial(int n) {if (n == 0) {return 1;}unsigned long long result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;}```4. 题目四:判断回文数给定一个整数,判断该数是否是回文数。

答案:```cint isPalindrome(int x) {int reversed = 0, original = x;while (x > 0) {int digit = x % 10;reversed = reversed * 10 + digit;x /= 10;}return original == reversed;}```5. 题目五:合并两个有序数组给定两个有序整数数组 nums1 和 nums2,其中 nums1 的长度为 m,nums2 的长度为 n。

2014年第五届蓝桥杯预赛题目JAVA软件开发本科A组

2014年第五届蓝桥杯预赛题目JAVA软件开发本科A组
对同一题目,选手可多次提交答案,以最后一次提交的答案为准。
参赛选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。
参赛选手必须通过浏览器方式提交自己的答案。选手在其它位置的作答或其它方式提交的答案无效。
试题包含三种类型:“结果填空”、“代码填空”与“程序设计”。
System.out.println("write to file: " + filename + " " + msg);
}
}
请填写划线部分缺失的代码。通过浏览器提交答案。
注意:不要填写题面已有的内容,也不要填写任何说明、解释文字。
标题:锦标赛
如果要在n个数据中挑选出第一大和第二大的数据(要求输出数据所在位置和值),使用什么方法比较的次数最少?我们可以从体育锦标赛中受到启发。
如图【1.png】所示,8个选手的锦标赛,先两两捉对比拼,淘汰一半。优胜者再两两比拼...直到决出第一名。
第一名输出后,只要对黄色标示的位置重新比赛即可。
下面的代码实现了这个算法(假设数据中没有相同值)。
代码中需要用一个数组来表示图中的树(注意,这是个满二叉树,不足需要补齐)。它不是存储数据本身,而是存储了数据的下标。
else
b[k] = -1;
return;
}
if(b[k2]<0){
if(b[k1]>=0)
b[k] = b[k1];
else
b[k] = -1;
return;
}
if(__________________________) //填空
b[k] = b[k1];

2014年第五届蓝桥杯预赛题目及标准答案

2014年第五届蓝桥杯预赛题目及标准答案

第六题标题:奇怪的分式上小学的时候,小明经常自己发明新算法。

一次,老师出的题目是:1/4 乘以8/5小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!对于分子、分母都是1~9 中的一位数的情况,还有哪些算式可以这样计算呢?请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1 乘以5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2 乘以3/3 这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是偶数)。

请通过浏览器提交。

不要书写多余的内容。

#include <cstdio>using namespace std;int sum = 0;int main(){for(int a = 1; a <= 9; a++){for(int b = 1; b <= 9; b++){for(int c = 1; c <= 9; c++){for(int d = 1; d <= 9; d++){if(a == b && c == d)continue;int na = a * 10 + c, nb = b * 10 + d;if(a * 1.0 / b * c * 1.0 / d >= na * 1.0 / nb - 0.000001 &&a * 1.0 /b *c * 1.0 /d <= na * 1.0 / nb +0.000001){printf("%d/%d * %d/%d = %d/%d\n", a, b, c, d, na, nb);sum++;}}}}}printf("sum = %d", sum);return 0;}。

第五届蓝桥杯程序设计大赛省赛题目及答案

第五届蓝桥杯程序设计大赛省赛题目及答案

第五届省赛1.一个串的子串是指该串的一个连续的局部。

如果不要求连续,则可称为它的子序列。

比如对串: "abcdefg" 而言,"ab","abd","bdef" 等都是它的子序列。

特别地,一个串本身,以及空串也是它的子序列。

对两个串而言,可以有许多的共同的子序列,我们关心的是:它们所共同拥有的长度最大的子序列是多长。

以下代码实现了这个问题的求解。

请填写划线部分缺失的代码。

注意:只填写划线部分缺少的内容,不要填写任何多余的符号或注释、说明等。

例如,不要填写已经给出的小括号。

inline max(int a, int b){return a>b?a:b;}int f(char* x, char* y){if(strlen(x)==0) return 0;if(strlen(y)==0) return 0;if(*x == *y) return f(x+1, y+1) + 1;return max( ______________________ );//处理字符串}int main(){printf("%d\n", f("ac","abcd")); //2printf("%d\n", f("acebbcde1133","xya33bc11de")); //5return 0;}f(x+1,y),f(x,y+1)2.历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式:pai = 4*(1-1/3+1/5-1/7 ....)参见【图1.png】这个公式简单而优美,但美中不足,它收敛的太慢了。

如果我们四舍五入保留它的两位小数,那么:累积了1项和是:4.00累积了2项和是:2.67累积了3项和是:3.47。

2014蓝桥杯c语言试题及答案

2014蓝桥杯c语言试题及答案

2014蓝桥杯c语言试题及答案一、选择题(每题2分,共10分)1. 下列关于C语言的描述中,错误的是:A. C语言是高级语言B. C语言是面向对象的程序设计语言C. C语言具有结构化的特点D. C语言具有跨平台的特性答案:B2. 以下哪个选项不是C语言中合法的变量名?A. _123B. intC. a$bD. for答案:B3. 在C语言中,用于定义一个结构体的关键字是:A. structB. unionC. enumD. typedef答案:A4. 下列关于C语言函数的描述中,正确的是:A. 函数必须有返回值B. 函数可以没有参数C. 函数的返回值类型必须与定义时一致D. 函数可以有多个返回值答案:B5. 在C语言中,以下哪个选项不是合法的字符串常量?A. "hello"B. "hello\n"C. "helloD. "hello\"答案:C二、填空题(每题2分,共10分)1. 在C语言中,定义一个整型数组的语句是:int a[10]; 则数组a 的第一个元素的值是______。

答案:02. C语言中,用于声明一个指针变量的语句是:int *p; 则指针p的初始值是______。

答案:NULL3. 在C语言中,使用______运算符可以将一个浮点数转换为整数。

答案:强制类型转换4. C语言中,用于定义一个函数的关键字是______。

答案:void5. 在C语言中,用于定义一个枚举类型的关键字是______。

答案:enum三、编程题(每题10分,共20分)1. 编写一个C语言程序,实现输入一个整数,输出该整数的平方值。

答案:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的平方是:%d\n", num, num * num);return 0;}```2. 编写一个C语言程序,实现输入一个字符串,输出该字符串的逆序。

第五届蓝桥杯试题答案

第五届蓝桥杯试题答案
15.if(fabs( (i*10 + r)*1.0/(j*10+k) - (i*r*1.0)/(j*k)) < eps){
16.//printf("%d/%d : %d/%d\n", (i*10 + r),(j*10+k), i*r,(j*k));
17.ans++;
18.}
19.}
20.}
21.}
{
if(a[14]=='b'&&wine==0)
{
count++;
show(a,15);
}
return;
}
a[i] = 'a';
drink(i+1,store+1,flower,wine*2); //逢店加一倍
a[i] = 'b';
drink(i+1,store,flower+1,wine-1); //遇花喝一斗
{
sum+=l; //给累加数列当前值
if(f==0) //当数列长度递减为0,进行判断
{
sum-=l; //sum减去当前数列值
if(sum==s) //如果sum等于数列和值
{
cnt++; //累加器加1
cnt%=mo;
}
return 0 ; //返回
}
Conut(l+a,f-1,sum);
Conut(l-b,f-1,sum);
if(m==82.3)
break;
x = x+1;
y = y-2;
}
printf("%d\n%d\n",x,y);

2014蓝桥杯C语言本科B组预赛 试题

2014蓝桥杯C语言本科B组预赛 试题

2014蓝桥杯C/C++语言本科B组预赛试题(完整)1.啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。

小明买了若干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

2.切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

3.李白打酒话说大诗人李白,一生好饮。

幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。

他边走边唱:无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。

则:babaabbabbabbbb就是合理的次序。

像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

注意:通过浏览器提交答案。

答案是个整数。

不要书写任何多余的内容。

4.史丰收速算史丰收速算法的革命性贡献是:从高位算起,预测进位。

不需要九九表,彻底颠覆了传统手算!速算的核心基础是:1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7是个循环小数:0.142857...,如果多位数超过142857...,就要进1同理,2/7,3/7, ... 6/7 也都是类似的循环小数,多位数超过n/7,就要进n下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。

乘以7 的进位规律是:满 142857 (1)满 285714 (2)满 428571 (3)满 571428 (4)满 714285 (5)满 857142... 进6请分析程序流程,填写划线部分缺少的代码。

[蓝桥杯][2014年第五届真题]分糖果

[蓝桥杯][2014年第五届真题]分糖果

[蓝桥杯][2014年第五届真题]分糖果题⽬描述:问题描述:有n个⼩朋友围坐成⼀圈。

⽼师给每个⼩朋友随机发偶数个糖果,然后进⾏下⾯的游戏:每个⼩朋友都把⾃⼰的糖果分⼀半给左⼿边的孩⼦。

⼀轮分糖后,拥有奇数颗糖的孩⼦由⽼师补给1个糖果,从⽽变成偶数。

反复进⾏这个游戏,直到所有⼩朋友的糖果数都相同为⽌。

你的任务是预测在已知的初始糖果情形下,⽼师⼀共需要补发多少个糖果。

输⼊程序⾸先读⼊⼀个整数N(2< N< 100),表⽰⼩朋友的⼈数。

接着是⼀⾏⽤空格分开的N个偶数(每个偶数不⼤于1000,不⼩于2)输出要求程序输出⼀个整数,表⽰⽼师需要补发的糖果数。

样例输⼊32 2 4样例输出4题意解析:1、偶数个糖:这⾥偶数个糖可分为两部分分别是:I、初始化赋值为偶数II、⽼师额外分配为偶数(num++);2、分糖:将⼀半的糖分给左⼿边的孩⼦:I、简化为直接分给下⼀个⼩孩;II、每个⼩孩的糖数分⼀半给下⼀个并且从上⼀个⼩孩那得到他的⼀半糖;i)是先从别⼈那得到他的⼀半糖后,再将现在的糖数分⼀半给下⼀个⼈,,还是所有⼈先分⼀半糖出来,每个⼈都前⼀个⼈那拿⾛他的⼀半糖?(这两种计算⽅式结果不同,也是本题解题关键;简化后即:先 + 再 / 还是先 / 再 + );3、判断糖数是否相等:I、不相等,跳转到第⼀条第⼆点(1.II),向下执⾏,II、相等,跳出循环,输出num;图解2.II.i:代码实现:#include <stdio.h>#define N 100void main() {int i, n, num = 0, a[N], t;scanf("%d", &n);for (i = 0; i < n; i++) {//scanf("%d", &a[i]);}for (;;) {for (i = 1; i < n; i++) {//i从1开始,表⽰a[0]直接判断与a[1]是否相等,跳过a[0]与a[0]⽐较;if (a[0] != a[i]) {break;//如果第⼀个⼩孩糖的数量与其他⼩孩糖的数量不相等,跳出for循环,往下执⾏}//如果没有进⼊if判断语句,说明所有⼩孩糖数相等,for循环从1执⾏到n-1;}if (i == n) {//接上for循环,当for循环执⾏完了以后,进⾏的操作是i++,此时i = n;所以可以拿来作为结束外循环条件;break;//跳出外层循环}for (i = 0; i < n; i++) {//判断是否有奇数个糖,奇数+1,偶数不变;if (a[i] % 2 == 1) {a[i]++;num++;}}t = a[n - 1];//下⾯分糖实按从后向前遍历,因此最后⼀个⼩孩的糖数在最开始就会改变,⽆法给第⼀个⼩孩赋值,因此需要保存下来; for (i = n - 1; i > 0; i--) {//,分糖(除以2)、得糖(+前⼀个⼈的1/2);a[i] = a[i] / 2 + a[i - 1] / 2;}a[0] = a[0] / 2 + t / 2;//给第⼀个同学实现分糖、得糖;}printf("%d", num);}其中,在分糖和得糖那步可以实现⼩的优化:前⾯代码不变,在判断奇偶时让所有同学的糖数⼀分为⼆;for ( i = 0; i < n; i++){if (a[i]%2==1){a[i]++;sum++;}a[i] /= 2;}temp = a[n - 1];for ( i = n-1; i >0; i--){//a[i] = a[i] / 2 + a[i - 1] / 2; a[i] += a[i - 1];}//a[0] = a[0] / 2 + temp / 2; a[0] += temp;}。

第五届蓝桥杯省赛b组试题及答案

第五届蓝桥杯省赛b组试题及答案

第五届蓝桥杯省赛b组试题及答案第五届蓝桥杯省赛B组试题及答案一、选择题(每题5分,共20分)1. 下列哪个选项是Python语言中用于定义函数的关键字?A. defB. functionC. funcD. declare答案:A2. 在HTML中,用于定义最重要的标题的标签是?A. <h1>B. <title>C. <header>D. <h6>答案:A3. 在JavaScript中,以下哪个方法用于获取数组中最后一个元素?A. last()B. first()C. pop()D. lastElement()答案:C4. 在CSS中,以下哪个属性用于设置元素的背景颜色?A. background-colorB. bg-colorC. colorD. back-color答案:A二、填空题(每题5分,共20分)1. 在Python中,用于执行条件判断的关键字是________。

答案:if2. 在HTML中,用于创建无序列表的标签是________。

答案:<ul>3. 在JavaScript中,用于获取当前日期的函数是________。

答案:new Date()4. 在CSS中,用于设置文本颜色的属性是________。

答案:color三、简答题(每题10分,共20分)1. 请解释什么是闭包,并给出一个简单的JavaScript闭包示例。

答案:闭包是一个函数和其周围的状态(词法环境)的组合。

闭包允许函数访问其定义时的作用域链,即使在其定义的作用域外执行。

示例:```javascriptfunction createClosure() {var secret = "I'm a secret";return function() {console.log(secret);};}var myClosure = createClosure();myClosure(); // 输出:I'm a secret```2. 请简述HTML5和HTML4的主要区别。

蓝桥杯预赛题目与答案

蓝桥杯预赛题目与答案

蓝桥杯预赛题目1第一题标题:啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。

小明买了若干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。

请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

#include <stdio.h>void main() { int pj,yl; //啤酒与饮料double sum=82.3; for(pj=0; pj<=20; pj++) { yl=(int)((sum-pj*2.3)/1.9); if(pj*2.3+yl*1.9==sum) { printf("pj=%d,yl=%d\n",pj,yl); //pj=11 yl=30 } } }第二题标题:切面条一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

#include <stdio.h> void main(){ int qie(int n); int g(int n); int sum=0; //面条总数int n=10; sum=qie(n); printf("%d\n",sum); }int qie(int n) //折叠n次以后,切一刀后的面条数{ int g(int n); if(n==1) { return 3; } else { return g(n-1)+ qie(n-1); //g(n)是有所有面条都有折痕一边的面条数} }int g(int n) { if(n==1) { return 2; } else { return g(n-1)*2; } }-----1025第三题标题:李白打酒话说大诗人李白,一生好饮。

201X年第五届蓝桥杯大赛软件类C_C++ B组全国总决赛真题

201X年第五届蓝桥杯大赛软件类C_C++ B组全国总决赛真题

2014年决赛C/C++本科B组1.结果填空(满分10分)标题:年龄巧合小明和他的表弟一起去看电影,有人问他们的年龄。

小明说:今年是我们的幸运年啊。

我出生年份的四位数字加起来刚好是我的年龄。

表弟的也是如此。

已知今年是2014年,并且,小明说的年龄指的是周岁。

请推断并填写出小明的出生年份。

这是一个4位整数,请通过浏览器提交答案,不要填写任何多余的内容(比如,他表弟的出生年份,或是他们的年龄等等)2.结果填空(满分25分)标题:出栈次序X星球特别讲究秩序,所有道路都是单行线。

一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。

路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】实用文档所示。

X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。

如果车辆进入检查站和离开的次序可以任意交错。

那么,该车队再次上路后,可能的次序有多少种?为了方便起见,假设检查站可容纳任意数量的汽车。

显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。

现在足足有16辆车啊,亲!需要你计算出可能次序的数目。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性文字)。

实用文档3.代码填空(满分35分)标题:信号匹配从X星球接收了一个数字信号序列。

现有一个已知的样板序列。

需要在信号序列中查找它首次出现的位置。

这类似于串的匹配操作。

如果信号序列较长,样板序列中重复数字较多,就应当注意比较的策略了。

可以仿照串的KMP算法,进行无回溯的匹配。

这种匹配方法的关键是构造next数组。

实用文档next[i] 表示第i项比较失配时,样板序列向右滑动,需要重新比较的项的序号。

如果为-1,表示母序列可以进入失配位置的下一个位置进行新的比较。

下面的代码实现了这个功能,请仔细阅读源码,推断划线位置缺失的代码。

// 生成next数组int* make_next(int pa[], int pn){int* next = (int*)malloc(sizeof(int)*pn);next[0] = -1;int j = 0;int k = -1;while(j < pn-1){if(k==-1 || pa[j]==pa[k]){j++;k++;next[j] = k;}实用文档elsek = next[k];}return next;}// da中搜索pa,da的长度为an, pa的长度为pn int find(int da[], int an, int pa[], int pn){int rst = -1;int* next = make_next(pa, pn);int i=0; // da中的指针int j=0; // pa中的指针int n = 0;while(i<an){n++;if(da[i]==pa[j] || j==-1){i++;实用文档j++;}else__________________________; //填空位置if(j==pn) {rst = i-pn;break;}}free(next);return rst;}int main(){int da[] = {1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,1,2,1,2,3};实用文档int pa[] = {1,2,1,1,2,1,1,1,2};int n = find(da, sizeof(da)/sizeof(int), pa, sizeof(pa)/sizeof(int));printf("%d\n", n);return 0;}注意:通过浏览器提交答案。

2014年第五届蓝桥杯大赛软件类C_C++ B组全国总决赛真题

2014年第五届蓝桥杯大赛软件类C_C++ B组全国总决赛真题

2014年决赛 C/C++本科B组1.结果填空 (满分10分)标题:年龄巧合小明和他的表弟一起去看电影,有人问他们的年龄。

小明说:今年是我们的幸运年啊。

我出生年份的四位数字加起来刚好是我的年龄。

表弟的也是如此。

已知今年是2014年,并且,小明说的年龄指的是周岁。

请推断并填写出小明的出生年份。

这是一个4位整数,请通过浏览器提交答案,不要填写任何多余的内容(比如,他表弟的出生年份,或是他们的年龄等等)2.结果填空 (满分25分)标题:出栈次序X星球特别讲究秩序,所有道路都是单行线。

一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。

路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。

X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。

如果车辆进入检查站和离开的次序可以任意交错。

那么,该车队再次上路后,可能的次序有多少种?为了方便起见,假设检查站可容纳任意数量的汽车。

显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。

现在足足有16辆车啊,亲!需要你计算出可能次序的数目。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性文字)。

3.代码填空 (满分35分)标题:信号匹配从X星球接收了一个数字信号序列。

现有一个已知的样板序列。

需要在信号序列中查找它首次出现的位置。

这类似于串的匹配操作。

如果信号序列较长,样板序列中重复数字较多,就应当注意比较的策略了。

可以仿照串的KMP算法,进行无回溯的匹配。

这种匹配方法的关键是构造next数组。

next[i] 表示第i项比较失配时,样板序列向右滑动,需要重新比较的项的序号。

如果为-1,表示母序列可以进入失配位置的下一个位置进行新的比较。

下面的代码实现了这个功能,请仔细阅读源码,推断划线位置缺失的代码。

// 生成next数组int* make_next(int pa[], int pn){int* next = (int*)malloc(sizeof(int)*pn);next[0] = -1;int j = 0;int k = -1;while(j < pn-1){if(k==-1 || pa[j]==pa[k]){j++;k++;next[j] = k;}elsek = next[k];}return next;}// da中搜索pa, da的长度为an, pa的长度为pnint find(int da[], int an, int pa[], int pn){int rst = -1;int* next = make_next(pa, pn);int i=0; // da中的指针int j=0; // pa中的指针int n = 0;while(i<an){n++;if(da[i]==pa[j] || j==-1){i++;j++;}else__________________________; //填空位置if(j==pn) {rst = i-pn;break;}}free(next);return rst;}int main(){int da[] = {1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,1,2,1,2,3};int pa[] = {1,2,1,1,2,1,1,1,2};int n = find(da, sizeof(da)/sizeof(int), pa, sizeof(pa)/sizeof(int));printf("%d\n", n);return 0;}注意:通过浏览器提交答案。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十题
标题:小朋友排队
n 个小朋友站成一排。

现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。

每个小朋友都有一个不高兴的程度。

开始的时候,所有小朋友的不高兴程度都是0。

如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。

当要求某个小朋友第k次交换时,他的不高兴程度增加k。

请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。

如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。

【数据格式】
输入的第一行包含一个整数n,表示小朋友的个数。

第二行包含n 个整数H1 H2 …Hn,分别表示每个小朋友的身高。

输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。

例如,输入:
3
3 2 1
程序应该输出:
9
【样例说明】
首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。

【数据规模与约定】
对于10%的数据,1<=n<=10;
对于30%的数据,1<=n<=1000;
对于50%的数据,1<=n<=10000;
对于100%的数据,1<=n<=100000,0<=Hi<=1000000。

资源约定:
峰值内存消耗< 256M
CPU消耗< 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意: 所有依赖的函数必须明确地在源文件中#include <xxx>,不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

10
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
struct People
{
int top;
int step;
};
struct Cmp
{
bool operator()(const People &m, const People &n)const
{
return m.top < n.top;
}
};
People arr[100005], sortArr[100005];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &arr[i].top);
arr[i].step = 0;
sortArr[i] = arr[i];
}
//memcpy(sortArr, arr, sizeof(People) * n);
sort(sortArr, sortArr + n, Cmp());
for(int i = 0; i < n; i++)
{
int j;
for(j = i; j < n; j++)
if(arr[j].top == sortArr[i].top)
break;
People temp = arr[j];
temp.step += j - i;
for(; j > i; j--)
{
arr[j] = arr[j - 1];
arr[j].step++;
}
arr[i] = temp;
}
int sum = 0;
for(int i = 0; i < n; i++)
sum += (arr[i].step + 1) * arr[i].step / 2;
printf("%d", sum);
return 0;
}。

相关文档
最新文档