当前位置:文档之家› 蓝桥杯培训教程

蓝桥杯培训教程

蓝桥杯培训教程
蓝桥杯培训教程

蓝桥杯培训教程

一、逻辑推理 (2)

二、排序 (8)

三、图形(矩阵) (12)

四、数字变幻 (21)

五、数字组合与拆解 (26)

六、字符串 (45)

七、数制转换 (50)

八、排列组合 (55)

九、其它 (55)

十、数据结构 (72)

一、逻辑推理

1、谁是窃贼:

公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎。在回答公安人员的问题中:

甲说:―乙没有偷,是丁偷的。‖

乙说:―我没有偷,是丙偷的。‖

丙说:―甲没有偷,是乙偷的。‖

丁说:―我没有偷‖

请根据这四人的谈话判断谁是盗窃者

*问题分析与算法设计

假设A、B、C、D分别代表四个人,变量的值为1代表该人是窃贼。

由题目已知:四人中仅有一名是窃贼,且这四个人中的每个人要么说真话,要么说假话,而由于甲、乙、丙三人都说了两句话:―X没偷,X偷了‖,故不论该人是否说谎,他提到的两人中必有一人是小偷。故在列条件表达式时,可以不关心谁说谎,谁说实话。这样,可以列出下列条件表达式:

甲说:‖乙没有偷,是丁偷的。‖ B+D=1

乙说:―我没有偷,是丙偷有。‖ B+C=1

丙说:―甲没有偷,是乙偷的。‖ A+B=1

丁说:―我没有偷。‖ A+B+C+D=1

其中丁只说了一句话,无法判定其真假,表达式反映了四人中仅有一名是窃贼的条件。

#include

void main()

{

int i,j,a[4];

for(i=0;i<4;i++) /*假定只有第i个人为窃贼*/

{

for(j=0;j<4;j++) /*将第i个人设置为1表示窃贼,其余为0*/

if(j==i)

a[j]=1;

else

a[j]=0;

if(a[3]+a[1]==1&&a[1]+a[2]==1&&a[0]+a[1]==1) /*判断条件是否成立*/

{

printf("The thief is "); /*成立*/

for(j=0;j<=3;j++) /*输出计算结果*/

if(a[j]) printf("%c.",j+'A');

printf("\n");

}

}

}

2、谁说假话:

张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真话,谁说的是假话?

*问题分析与算法设计

分析题目,每个人都有可能说的是真话,也有可能说的是假话,这样就需要对每个人所说的话进行分别判断。假设三个人所说的话的真假用变量A、B、C表示,等于1表示该人说的是真话;表示这个人说的是假话。由题目可以得到:

*张三说李四在说谎张三说的是真话:a==1&&b==0

或张三说的是假话:a==0&&b==1

*李四说王五在说谎李四说的是真话:b==1&&c==0

或李四说的是假话:b==0&&c==1

*王五说张三和李四都在说谎王五说的是真话:c==1&&a+b==0

或王五说的是假话:c==0&&a+b!=0

上述三个条件之间是―与‖的关系。将表达式进行整理就可得到C语言的表达式:

(a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0)

穷举每个人说真话或说假话的各种可能情况,代入上述表达式中进行推理运算,使上述表达式均为―真‖的情况就是正确的结果。

*程序说明与注释

#include

int main()

{

int a,b,c;

for(a=0;a<=1;a++)

for(b=0;b<=1;b++)

for(c=0;c<=1;c++)

if((a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0))

{

printf("Zhangsan told a %s.\n",a?"truth":"lie");

printf("Lisi told a %s.\n",b?"truch":"lie");

printf("Wangwu told a %s.\n",c?"truch":"lie");

}

}

*运行结果

Zhangsan told a lie (张三说假话)

Lisi told a truch. (李四说真话)

Wangwu told a lie. (王五说假话)

3、诚实族和说谎族:

诚实族和说谎族是来自两个荒岛的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话。迷语博士是个聪明的人,他要来判断所遇到的人是来自哪个民族的。

迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话:

问第一个人:―你们是什么族?‖,答:―我们之中有两个来自诚实族。‖第二个人说:―不要胡说,我们三个人中只有一个是诚实族的。‖第三个人听了第二个人的话后说:―对,就是只有一个诚实族的。‖

请根据他的回答判断他们分别是哪个族的。

*问题分析与算法设计

假设这三个人分别为A、B、C,若说谎其值为0,若诚实,其值为1。根据题目中三个人的话可分别列出:

第一个人:a&&a+b+c==2||!a&&a+b+c!=2

第二个人:b&&a+b+c==1||!b&&a+b+c!=1

第三个人:c&&a+b+c==1||!c&&a+b+c!=1

利用穷举法,可以很容易地推出结果。

*程序说明与注释

#include

int main()

{

int a,b,c;

for(a=0;a<=1;a++) /*穷举每个人是说谎还是诚实的全部情况*/

for(b=0;b<=1;b++) /*说谎:0 诚实:1*/

for(c=0;c<=1;c++)

if((a&&a+b+c==2||!a&&a+b+c!=2) /*判断是否满足题意*/

&&(b&&a+b+c==1||!b&&a+b+c!=1)

&&(c&&a+b+c==1||!c&&a+b+c!=1))

{

printf("A is a %s.\n",a?"honest":"lier"); /*输出判断结果*/

printf("B is a %s.\n",b?"honest":"lier");

printf("C is a %s.\n",c?"honest":"lier");

}

}

*运行结果

A is a lier (说谎族)

B is a lier (说谎族)

C is a lier (说谎族)

4、球队进行比赛

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛

名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单

*程序说明与注释

#include

#include

main()

{

char i,j,k; /*i是a的对手,j是b的对手,k是c的对手*/

for(i='x';i<='z';i++)

for(j='x';j<='z';j++)

{

if(i!=j)

for(k='x';k<='z';k++)

{

if(i!=k&&j!=k)

{

if(i!='x'&&k!='x'&&k!='z')

printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);

}

}

}

getch();

}

5、谁考了100分

已知4位同学中的一位数学考了100分,当小李询问这4位是谁考了100分时,4个人的回答如下:

A说:不是我。

B说:是C

C说:是D。

D说:他胡说。

已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出考100分的人。#include

void main()

{

char thisman=' ';

int k,n=0;

for(k=1;k<=4;k++)

{

thisman=64+k;

n=(thisman!='A')+ (thisman=='C')+ (thisman=='D')+ (thisman!='D');

if(n==3)

{

printf("得100分的是%c\n",thisman);

break;

}

}

if(k>4)

printf("无解!\n");

}

6、新郎新娘问题:

教堂中来了A B C三个新郎和X Y Z三个新娘,问新人中的三位,他们互相与谁结婚。下面是三个人的回答,但全是假话,判断他们谁与谁结婚

A说他与X结婚

X说她与C结婚

C说他与Z结婚

#include

void main()

{

int a,b,c,n;

char x[3]={'X','Y','Z'};

for(a=0;a<3;a++)

for(b=0;b<3;b++)

if(a!=b)

{

c=3-a-b;

n=(a==0)+(c==0)+(c==2);

if(n==0)

printf("A-%c\tB-%c\tC-%c\n",x[a],x[b],x[c]);

}

}

7、寻找肇事车辆:

一辆汽车撞人后逃跑,4个目击者提供如下线索:

甲说:牌照第三,第四位相同(从左边数起).

乙说:牌号为31xxxx.

丙说:牌照第五,第六位相同(从左边数起).

丁说:第三位~第六位是一个整数的平方.求出此牌照号码

#include

#include

void main()

{

int i,j,k,c;

for(i=0;i<=9;i++)

for(j=0;j<=9;j++)

// if(i!=j) //如果确定三、四位与五六位不同,则用这个语句

{

k=i*1000+i*100+j*10+j;

for(c=0;c

//for(c=0;c-1

{

if(c*c==k)

printf("牌照号码是:%ld\n",310000+k);

}

}

}

8、.借书方案知多少小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?

*问题分析与算法设计

本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本,当三个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。

*程序说明与注释

#include

int main()

{

int a,b,c,count=0;

printf("There are diffrent methods for XM to distribute books to 3 readers:\n");

for(a=1;a<=5;a++) /*穷举第一个人借5本书中的1本的全部情况*/

for(b=1;b<=5;b++) /*穷举第二个人借5本书中的一本的全部情况*/

for(c=1;a!=b&&c<=5;c++) /*当前两个人借不同的书时,穷举第三个人借5本书

中的1本的全部情况*/

if(c!=a&&c!=b) /*判断第三人与前两个人借的书是否不同*/

printf(count%8?"%2d:%d,%d,%d ":"%2d:%d,%d,%d\n ",++count,a,b,c);

/*打印可能的借阅方法*/

}

*运行结果

There are diffrent methods for XM to distribute books to 3 readers:

1: 1,2,3 2: 1,2,4 3: 1,2,5 4: 1,3,2 5: 1,3,4

6: 1,3,5 7: 1,4,2 8: 1,4,3 9: 1,4,5 10:1,5,2

11:1,5,3 12:1,5,4 13:2,1,3 14:2,1,4 15:2,1,5

16:2,3,1 17:2,3,4 18:2,3,5 19:2,4,1 20:2,4,3

21:2,4,5 22:2,5,1 23:2,5,3 24:2,5,4 25:3,1,2

26:3,1,4 27:3,1,5 28:3,2,1 29:3,2,4 30:3,2,5

31:3,4,1 32:3,4,2 33:3,4,5 34:3,5,1 35:3,5,2

36:3,5,4 37:4,1,2 38:4,1,3 39:4,1,5 40:4,2,1

41:4,2,3 42:4,2,5 43:4,3,1 44:4,3,2 45:4,3,5

46:4,5,1 47:4,5,2 48:4,5,3 49:5,1,2 50:5,1,3

51:5,1,4 52:5,2,1 53:5,2,3 54:5,2,4 55:5,3,1

56:5,3,2 57:5,3,4 58:5,4,1 59:5,4,2 60:5,4,3

二、排序

1、在选美大奖赛的半决胜赛现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当半决决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:

选手序号:1,2,3,4,5,6,7

选手得分:5,3,4,7,3,5,6

则输出名次为:3,1,2,5,1,3,4

请编程帮助大奖赛组委会完成半决赛的评分和排名工作。

*问题分析与算法设计

问题用程序设计语言加以表达的话,即为:将数组A中的整数从小到大进行连续编号,要求不改变数组中元素的顺序,且相同的整数要具有相同的编号。

普通的排序方法均要改变数组元素原来的顺序,显然不能满足要求。为此,引入一个专门存放名次的数组,再采用通常的算法:在尚未排出名次的元素中找出最小值,并对具有相同值的元素进行处理,重复这一过程,直到全部元素排好为止。

*程序说明与注释

#include

#define NUM 7 /*定义要处理的人数*/

int a[NUM+1]={0,5,3,4,7,3,5,6}; /*为简单直接定义选手的分数*/

int m[NUM+1],l[NUM+1]; /*m:已编名次的标记数组l:记录同名次元素的下标*/

int main()

{

int i,smallest,num,k,j;

num=1; /*名次*/

for(i=1;i<=NUM;i++) /*控制扫描整个数组,每次处理一个名次*/

if(m[i]==0) /*若尚未进行名次处理(即找到第一个尚未处理的元素)*/

{

smallest=a[i]; /*取第一个未处理的元素作为当前的最小值*/

k=1; /*数组l的下标,同名次的人数*/

l[k]=i; /*记录分值为smallest的同名次元素的下标*/

for(j=i+1;j<=NUM;j++) /*从下一个元素开始对余下的元素进行处理*/

if(m[j]==0) /*若为尚未进行处理的元素*/

if(a[j]

{

smallest=a[j]; /*则重新设置当覵最小值*/

k=0; /*重新设置同名次人数*/

l[++k]=j; /*重新记录同名次元素下标*/

}

else if(a[j]==smallest) /*若与当前最低分相同*/

l[++k]=j; /*记录同名次的元素下标*/

for(j=1;j<=k;j++) /*对同名次的元素进行名次处理*/

m[l[j>=num;

num++; /*名次加1*/

i=0; /*控制重新开始,找下一个没排名次的元素*/

}

printf("Player-No score Rank\n");

for(j=1;j<=NUM;j++) /*控制输出*/

printf(" %3d %4d %4d\n",j,a[j],m[j]);

}

*运行结果

Player-No Score Rank

1 5 3

2 3 1

3 4 2

5 7 5

5 3 1

3 5 3

7 6 4

*思考题

若将原题中的“名次连续编号,不用考虑同名次的选手人数”,改为”根据同名次的选手人数对选手的名次进行编号“,那么应该怎样修改程序。

2、合并字符串

输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。

输入:两个已经排好顺序(升序)的两个字符串

输出:一个合并在一起的有序(升序)的字符串

要求:

设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。

如果采用先进行串连接,然后再进行排序的算法,则效率太低了。

程序实例1:

#include

#include

int main()

{ char a[100],b[100],c[200];

int i=0,j=0,k=0;

gets(a);gets(b);

while(i

if(a[i]

c[k++]=a[i++];

}

else {

c[k++]=b[j++];

}

}

//把剩下的字符串合并

while(i

c[k++]=a[i++];

}

while(j

c[k++]=b[j++];

}

c[k]='\0'; //加上结束符

printf("%s\n",c);

return 0;

}

输入:

abcdef

bcefghi

输出:abbccdeeffghi

3、合并果子

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。

输入:

输入包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。第二行

包含n个整数,用空格分隔,第i个整数ai(1<=ai<=10000)是第i种果子的数目。

输出:

输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。

程序实例1:

#include

int in[ 100 ];

int find( int len ) //返回最小堆堆序号

{

int i,min=10000,j;

for ( i = 1; i <= len; i ++ ) {

if ( in[ i ] < min ) {

j = i;

min = in[ i ];

}

}

return j;

}

int main( void)

{

int i,j,min,result,n,a,b;

scanf( "%d", &n );

for( i = 1; i <= n; i ++ ) {

scanf( "%d", &in[ i ] );

}

result = 0;

for( i = 1; i <= n - 1; i ++ ) {

j = find( n ); //最小的堆

a = in[ j ];

in[ j ] = 10001;

j = find( n );

b = in[ j ]; //次最小的堆

in[ j ] = a + b; //合并

result += in[ j ];

}

printf( "%d\n", result );

return 0;

}

输入:

3

1 2 9

输出:15

三、图形(矩阵)

1、编写函数void rotate(int (*t)[N], int n)。函数功能是将t指向的数组中存储的n×n.矩阵最外圈全部元素做顺时钟旋转900变换。

例如:若n=3有如下矩阵:

1 2 3

4 5 6

7 8 9

将矩阵最外圈全部元素做顺时钟旋转900变换后应为:

7 4 1

8 5 2

9 6 3

2、求一个3行5列的二维数组中元素的最大值。

#include

typedef unsigned int UINT;

int main()

{

UINT mx=0,my=0;

UINT juzhen[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};

UINT maxnumber=0;

maxnumber=juzhen[0][0];

for (int i=0;i!=3;++i)

{

for (int j=0;j!=5;++j)

{

if (juzhen[i][j]>maxnumber)

{

maxnumber=juzhen[i][j];

mx=i;

my=j;

}

}

}

cout<<"矩阵中最大数是"<

"<

//这里的样例输出最大数是15,在2行4列.听起来似乎比三行5列都少一.

//这其实是计算机计数都是从0开始.我们人习惯从1开始计数..

//如果你需要从1计数.也很简单..把for循环改改.int i=1;i!=6;++i 里面的循环液照样改下.

return 0;

}

3、((2012年预赛题))转方阵

对一个方阵转置,就是把原来的行号变列号,原来的列号变行号例如,如下的方阵:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

转置后变为:

1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:

13 9 5 1

14 10 6 2

15 11 7 3

16 12 8 4

下面的代码实现的功能就是要把一个方阵顺时针旋转。

#include

#include

void rotate(int* x, int rank)

{

int* y = (int*)malloc( ); // 填空sizeof(int)*rank*rank

for(int i=0; i

{

y[_________________________] = x[i]; // 填空i%rank*rank+i/rank }

for(i=0; i

{

x[i] = y[i];

}

free(y);

}

int main(int argc, char* argv[])

{

int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

int rank = 4;

rotate(&x[0][0], rank);

for(int i=0; i

{

for(int j=0; j

{

printf("%4d", x[i][j]);

}

printf("\n");

}

return 0;

}

请分析代码逻辑,并推测划线处的代码。

4、(2011年预赛题)由键盘输入一个自然数N(1≤N≤9),要求程序在屏幕上输出如下图形。

N=1时:N=3时:N=4时:

1111111111111

122211222221

123211233321

122211234321

111111233321

1222221

1111111注:应保证N在图形中只出现一次,且在中心。

import java.util.Scanner;

import java.text.DecimalFormat;

public class LuoxuanJuzhen

{

private int[][] array;

private int m,n;

public LuoxuanJuzhen(int m, int n) //相当于动态数组,数组的行、列由参数m和n确定{

this.m = m;

this.n = n;

array = new int[m][];

for(int i = 0; i < m; i++)

array[i] = new int[n];

}

private void fill() //构造矩阵,填入内容

{

int count = m * n;

int direct = 0;

int round = 1;

for(int index = 1, x = 0, y = 0; index <= count; index++) {

array[x][y] = index;

switch(direct)

{

case 0: //向右

if(y < n - round)

y++;

else

{

direct = 1;

x++;

}

break;

case 1://向下

if(x < m - round)

x++;

else

{

direct = 2;

y--;

}

break;

case 2://向左

if(y >= round)

y--;

else

{

direct = 3;

x--;

}

break;

case 3://向上

if(x > round)

x--;

else

{

direct = 0;

round++;

y++;

}

break;

}

}

}

private void printJuzheng() //输出矩阵

{

//DecimalFormat df = new DecimalFormat(" 000");//格式化,让不足三位的数前面用0补足三位,如2表示为002

for(int i = 0; i < m; i++)

{

for(int j = 0; j < n; j++)

System.out.print("\t"+array[i][j]);

//System.out.print(df.format(array[i][j]));

System.out.println();

}

}

public static void main(String[] args)

{

Scanner input = new Scanner(System.in);

int m = input.nextInt();

LuoxuanJuzhen Juzheng = new LuoxuanJuzhen(m,m);

Juzheng.fill();

Juzheng.printJuzheng();

}

}

5、空心的倒三角型

背景:请根据要求打印可空心倒三角形。

输入:

输入三角形的高度(h >= 0)。

输出:

打印相应的空心倒三角形。图样参见测试用例。

如:

输入为5,则输出:

*********

* *

* *

* *

*

程序实例1:

#include

void main( )

{

int n,i,j;

scanf("%d",&n);

for(i=0;i

{for(j=0;j<(2*n-1-i);j++)

{if (i==0||i==j||j==(-i+2*n-2))printf("*");

else printf(" ");

}

printf("\n");

}

}

程序实例2:

#include

void main()

{

int r,l,h;

scanf("%d",&h);

for(r=1;r<=2*h-1;r++)

printf("*");

for(r=2;r<=h;r++)

{

printf("\n");

for(l=1;l<=2*h-r;l++)

printf("%s",(l==r||l==2*h-r)?"*":" ");

}

}

6、在20×20的网格中同一直线上四个数的最大乘积是多少?

在以下这个2020的网格中,四个处于同一对角线上的相邻数字用红色标了出来:这四个数字的乘积是:26 63 78 14 = 1788696.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08

49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00

81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65

52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91

22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80

24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50

32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70

67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21

24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72

21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95

78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92

16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57

86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58

19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40

04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66

88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69

04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36

20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16

20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54

01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

在这个2020网格中,处于任何方向上(上,下,左,右或者对角线)的四个相邻数

字的乘积的最大值是多少?

7、扫雷

背景

你玩儿过扫雷游戏吧?有个操作系统中带了这个小游戏,那个系统叫什么来着?在游戏中要想过关,就必须要在一个NxM 的区域上找出所有的地雷。游戏过程中,计算机会在地图上显示一些数字从而帮助你确定哪里有地雷。例如,在下面这个有两颗地雷的4x4 的地图(*表示地雷):

*........*...... 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示:

*10022101*101110 每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。

输入:

输入中将包括一系列的地图,每个地图的第一行有两个整数n 和m(0

输出:

针对每一个地图,首先输出一行:

Field #x:其中x 是当前地图的编号(从1 开始)。下面的n 行则将地图中的"." 以数字表示,该数字表示该方格周围有多少颗地雷。

程序实例1:

#include "stdio.h"

void main()

{ int m,n,t,p,q,x,y,a[200][200];

char c;

t=1;

scanf("%d%d",&m,&n);

A: if(m==0) goto B;

for(p=0;p<=m;p++) for(q=0;q<=n;q++) a[p][q]=0;

for(p=0;p

for(q=0;q<=n;q++)

{scanf("%c",&c);

if(c=='*')

{a[p][q]=-1;

for(x=p-1;x<=p+1;x++)

for(y=q-1;y<=q+1;y++)

if(x>=0&&x<=m&&y>=0&&y<=n&&a[x][y]!=-1) a[x][y]++;

}

}

printf("Field #%d:\n",t);

for(p=0;p

{for(q=1;q<=n;q++) (a[p][q]==-1)?printf("*"):printf("%d",a[p][q]);

printf("\n");

}

scanf("%d%d",&m,&n);

t++;

if(m!=0) {printf("\n");goto A;}

B: ;

}

输入:

4 4

*...

....

.*..

....

3 5

**...

.....

.*...

0 0

输出:

Field #1:

*100

2210

1*10

1110

Field #2:

**100

33200

1*100

程序实例2:

#include

int main(void)

{ int f(int m,int n,int i,int j,char a[100][100]);

int m,n,i,j,b=0;

char a[100][100];

scanf("%d %d",&m,&n);

while(m!=0&&n!=0)

{ b++;

if(b!=1) printf("\n");

for(i=0;i

{ scanf("%s",a[i]);

}

for(i=0;i

{ for(j=0;j

{ if(a[i][j]=='.') a[i][j]=f(m,n,i,j,a)+48;

}

}

printf("Field #%d:\n",b);

for(i=0;i

{ for(j=0;j

{ printf("%c",a[i][j]);

}

printf("\n");

}

scanf("%d %d",&m,&n);

}

return 0;

}

int f(int m,int n,int i,int j,char a[100][100])

{ int k,l,b=0;

for(k=i-1;k<=i+1;k++)

{ for(l=j-1;l<=j+1;l++)

{ if(k<0||l<0||k>=m||l>=n||k==i&&l==j) continue;

else if(a[k][l]=='*') b++;

}

}

return b;

}

输入:

3 3

...

...

第七届蓝桥杯大赛2016年蓝桥杯个人赛 (电子类) 省赛 单片机设计与开发科目

准考证号 工位号 注意:只填写准考证号和工位号,否则试卷作废 密 封 线 ----------------------------------------------------------------------------- 第七届蓝桥杯全国软件和信息技术专业人才大赛个人赛 (电子类)省赛 单片机设计与开发科目 竞赛时间:5小时 题 号 一 二 三 总 分 配 分 10 30 60 100分 得 分 “模拟风扇控制系统”设计任务书 功能简述 “模拟风扇控制系统”能够模拟电风扇工作,通过按键控制风扇的转动速度和定时时间, 数码管实时显示风扇的工作模式,动态倒计时显示剩余的定时时间,系统主要由数码管显示、单片机最小系统、按键输入和电机控制保护电路组成,系统框图如图1所示: 图1. 系统框图 单总线驱动程序、CT107D 单片机考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。程序流程图及相关工程文件请以考生号命名,并保存在计算机上的考生文件夹中(文件夹名为考生准考证号,文件夹保存在监考员指定位置)。 DS18B20 MCU 按键输入 LED 指示灯 数码管显示 PWM 输出

设计任务及要求 1.工作模式 设备具有“睡眠风”、“自然风”和“常风”三种工作模式可以通过按键切换,通过单片机P34引脚输出脉宽调制信号控制电机运行状态,信号频率为1KHz。 1.1“睡眠风”模式下,对应PWM占空比为20%; 1.2“自然风”模式下,对应PWM占空比为30%; 1.3“常风”模式下,对应PWM占空比为70%; 2.数码管显示 数码管实时显示设备当前工作模式和剩余工作时间(倒计时),如图2所示。 - 1 - 80 0 5 0 工作模式:睡眠风熄灭剩余工作时间:50秒 图2.工作模式和剩余工作时间显示 “睡眠风”状态下,对应数码管显示数值为1,自然风模式下,显示数值为2,常风模式下,显示数值为3。 3.按键控制 使用S4、S5、S6、S7四个按键完成按键控制功能。 2.1 按键S4定义为工作模式切换按键,每次按下S4,设备循环切换三种工作模式。 工作过程如下: 睡眠风自然风常风 2.2 按键S5定义为“定时按键”每次按下S5,定时时间增加1分钟,设备的剩余 工作时间重置为当前定时时间,重新开始倒计时,工作过程如下: 0分钟1分钟2分钟 设备剩余工作时间为0时,停止PWM信号输出。 2.3 按键S6定义为“停止”按键,按下S6按键,立即清零剩余工作时间,PWM 信号停止输出,直到通过S5重新设置定时时间。 2.4 按键S7定义为“室温”按键,按下S7,通过数码管显示当前室温,数码管显 示格式如图3所示,再次按下S7,返回图2所示的工作模式和剩余工作时间

大学生可以参加的竞赛项目

年大学生可以参加的竞赛项目

————————————————————————————————作者:————————————————————————————————日期:

校外学生科技学术活动计划一览表 (共91项) 序号竞赛名称主办单位 1 第八届“挑战杯”全国大学生创业计划竞 赛 共青团中央、中国科协、教育部、全国学联 2 第三届“北斗杯”全国青少年科技创新大 赛 教育部科技司、团中央学校部、中国科协青少年科技中心、中国卫星导航系统管理办 公室 3 第二届全国高等学校采矿工程专业学 生实践作品大赛 教育部高等学校地矿学科教学指导委员会 4 第七届全国大学生交通科技大赛教育部高等学校交通运输与工程学科教学指导委员会 5 “高教杯”全国三维数字化创新设计大赛国家制造业信息化培训中心、全国三维数字化创新设计大赛组委会 6 全国信息技术应用水平大赛教育部教育管理信息中心 7 Esri杯中国大学生GIS软件开发竞赛中国地理信息系统协会、Esri中国(北京)有限公司 8 supermap杯全国高校GIS大赛中国地理学会、北京超图软件股份有限公司 9 全国高校GIS技能大赛 中国测绘学会、工业和信息化部人才交流中心、教育部地理信息系统软件及其应用工 程研究中心

10 全国高校GIS 论坛GIS论坛组委会 教育部普通高校测绘学科教学指导委员会、国家测绘局职业技能鉴定指导中心、中国11 全国普通高校大学生测绘技能大赛 测绘学会 12 山东省高校大学生测量技能大赛山东测量学会 13 全国第二届地质技能大赛中国地质调查局、中国地质学会地质教育研究分会 14 第五届山东省高校结构设计大赛山东省土木工程学会建筑结构专业委员会、山东大学 15 2012年山东省大学生建筑设计竞赛山东省住房和城乡建设厅、山东省科学技术协会 2012全国高等学校城市规划专业社会 16 全国高等学校城市规划专业教育指导委员会 综合实践调研报告课程作业评优 17 山东省大学生机电产品创新设计竞赛山东省机械工业协会、山东省机械工程学会 “高教杯”全国大学生先进成图技术与产 教育部高等学校工程图学教学指导委员会 18 品信息建模创新大赛 19 过程装备实践与创新大赛教育部高等学校机械学科教学指导委员会 20 “飞思卡尔”杯全国大学生智能汽车竞赛教育部高等学校自动化专业教学指导分委员会

蓝桥杯哦2010第一届大赛试题

第一题,以下函数的功能是将任意整数进行因式分解, 请完成该程序的空缺使函数能够正常运算 void f(int n) { for(int i=2; i1) printf(“%d\n”, n); } 第二题,以下函数的功能是将给定字符串进行倒序输出,请完成该函数空缺部分。 char* p = “abcdef”; char* q = (char*)malloc(strlen(p)+1); for(int i=0, int len=strlen(p); i

第三题,(这题的题目到底是要干啥,本人到现在沿未明了,数学学统计好,但可以确定原题给出的代码就是如此) int f(int m, int n) { int a = 1; int m1 = m; //—–(3)—- a *= m1–; int b = 1; while(n>1) b *= n–; return a / b; } 第四题,任意给出一个四位数, 把它重新组成一个四位的最大数和一个最小数, 算出两者间的差。 例如:3721这个数,可以重组成:7321和1237,相数之差为7321-1237 请完善下面这个函数,以实现此功能 int f(int n) { int N[4]; for(int i=0; i<4; i++) { N[3-i] = n % 10;

第十一届蓝桥杯大赛软件类省赛第三场 CC++

第十一届蓝桥杯大赛软件类省赛第三场C/C++大学B组 第十一届蓝桥杯大赛软件类省赛第三场 C/C++大学B组 【考生须知】 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。 考试时间为4小时。考试期间选手可浏览自己已经提交的答案,被浏览的答案允许拷贝。时间截止后,将无法继续提交或浏览答案。 对同一题目,选手可多次提交答案,以最后一次提交的答案为准。 选手必须通过浏览器方式提交自己的答案。选手在其它位置的作答或其它方式提交的答案无效。 试题包含“结果填空”和“程序设计”两种题型。 结果填空题:要求选手根据题目描述直接填写结果。求解方式不限。不要求源代码。把结果填空的答案直接通过网页提交即可,不要书写多余的内容。 程序设计题:要求选手设计的程序对于给定的输入能给出正确的输出结果。考生的程序只有能运行出正确结果才有机会得分。 注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。 对于编程题目,要求选手给出的解答完全符合GNU C/C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。 代码中允许使用STL类库。 注意:main函数结束必须返回0 注意:所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。 所有源码必须在同一文件中。调试通过后,拷贝提交。 提交时,注意选择所期望的编译器类型。 第十一届蓝桥杯大赛软件类省赛第三场1

第十一届蓝桥杯大赛软件类省赛第三场C/C++大学B组 试题A:数青蛙 本题总分:5分 【问题描述】 “一只青蛙一张嘴,两只眼睛四条腿。两只青蛙两张嘴,四只眼睛八条腿。三只青蛙三张嘴,六只眼睛十二条腿。……二十只青蛙二十张嘴,四十只眼睛八十条腿。” 请问上面这段文字,如果完全不省略,全部写出来,从1到20只青蛙,总共有多少个汉字。 约定:数字2单独出现读成“两”,在其他数里面读成“二”,例如“十二”。10读作“十”,11读作“十一”,22读作“二十二”。 请只计算汉字的个数,标点符号不计算。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 试题A:数青蛙2

蓝桥杯比赛心得

蓝桥杯比赛心得 首先想说的是,这次做的太糟糕了吧。第一是时间没有分配好,第二是太过心急。 做第一题时,很快写出了公式,心想咋出这么简单的题目。本想自己不敲代码了,直接拿笔算算得了。后来发现用笔也不是太容易,就敲了代码,刚开始不知道怎么回事不出结果,后来用了个double 来保存结果,然后就输出结果了。后来查了查才知道之前用了这句 If(i*2.3+j*1.9==82.3)cout<然后Iffabs((i*2.3+j*1.9-82.3)<0.0000001)cout<

迷茫了会,后来就用了四个for循环,将结果用a,b分别表示出来,然后很快结果就出来了,开始会考虑用的double不会有误差,然后还特意将编译出来的结果一个一个的看看,确认是对的,然后就稳稳当当的提交了86!后来和学姐他们讨论的时候才发现自己有个问题忘了考虑了,2/2 *3/3这样的情况是要除去的!!!好吧,就这么错了!很多时候都会觉得自己太粗心大意了,然后就想到了曾经看到的一篇文章,说是所谓的粗心是你对知识的理解不透彻掌握的不扎实。往往以为自己做出来了就完事大吉了,然而最后才发现自己顾此失彼了! 做完分子分母问题当时觉得前面三道题做的必定是对的,然后就又把后面的题目有都看了一遍,同时决定后面的三道答题放弃不做了。接着我看来看7进制问题,发现题目没有看懂。。然后我觉得数字填数挺有意思就看看手写能不能搞定,当时看到了上下两个三角形一共六条边,一共12个数1-12,平均每条线上的值的和为26,然后觉得那两个空就是10或者5,15+11==26,然后在本子上划了划,感觉做不出来,就放那了,其实可以先随便蒙一个的,很大可能就对了呀。。。总之还是没有思路吧。 接着就是随便看其他的题目了瞄到了最后一题,当时感觉是可以做出来的,只是时间会用的比较长。好像是从11点多点开始做的,一直做到1点,太死心塌地了,,,感觉差一点就做出来了吧,后来和老师讨论才发现自己的思路还是错的。。。若是拿最后放弃最后一道题检查一下也不至于搞的这么惨。。。。。 比赛的时候还是有点紧张的吧,,心态调的不是太好,最重要的

蓝桥杯比赛要求

七、奖项设置及评选办法 7.1 省赛 1.参赛选手奖 省赛每个组别设置一、二、三等奖,比例分别为10%、20%、30%,总比例为实际参赛人数的60%,零分卷不得奖。省赛一等奖选手获得直接进入全国总决赛资格。所有获奖选手均可获得由工业和信息化部人才交流中心及大赛组委会联合颁发的获奖证书。 2.指导教师奖 省赛中获奖的参赛选手的指导教师将获得“蓝桥杯全国软件和信息技术专业人才大赛(××赛区)优秀指导教师”称号。 3.参赛学校奖 参赛组织工作表现突出、经审批符合相关条件的单位,将获得“蓝桥杯全国软件和信息技术专业人才大赛(××赛区)优秀组织单位”称号; 参赛选手成绩优异,经审批符合相关条件的学校将获得“蓝桥杯全国软件和信息技术专业人才大赛(××赛区)优胜学校”称号。 7.2 总决赛 全国总决赛按参赛项目和成绩,为获奖学生、教师和组织单位颁发相应证书和奖 励。其中: 1.参赛选手奖 个人赛根据相应组别分别设立特、一、二、三等奖及优秀奖。在决赛奖项设置中, 每个组别设置特等奖1名,一等奖不高于5%,二等奖占20%,三等奖不低于25%,优秀奖 不超过50%,零分卷不得奖。 所有获奖选手均可获得由工业和信息化部人才交流中心及大赛组委会联合颁发的获 奖证书。 大学组总决赛三等奖及以上选手,如果获得本校免试推研资格,将获得北京大学软 件与微电子学院等院校的面试资格,并优先录取为该院普通硕士研究生。 大学组总决赛三等奖及以上选手,可免除笔试,直接获得百度、IBM等企业在员工 招聘及实习生招聘中的面试机会。 2.指导教师奖 所有获奖选手的指导教师,均可获得“蓝桥杯全国软件和信息技术专业人才大赛优秀 指导教师”证书。 3.参赛学校奖 参赛组织工作成绩突出、经审批符合相关条件的单位,获“蓝桥杯全国软件和信息技 术专业人才大赛优秀组织单位”称号; 参赛选手成绩优异、经审批符合相关条件的学校,获“蓝桥杯全国软件和信息技术专 业人才大赛优胜学校”称号。

2016第七届蓝桥杯CC++-B组题解

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

第十一届蓝桥杯校内赛校内选拔赛(2020蓝桥杯校选1-javac.)

第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选1-java/c) 一、问题描述 请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制。 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分. 二、问题描述 两个二进制数11110011101和1111101001的和是多少?请用二进制表示,注意在提交的时候不要提交前导0。 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个二进制数,在提交答案时只填写这个二进制数,填写多余的内容将无法得分。 三、问题描述 将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。 请问,总共能排列如多少个不同的单词。 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 四、问题描述 在2019个有区别的球中选3个球放在一个盘子里,请问有多少种选法? 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 五、问题描述 小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。 给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。 输入格式: 输入一行,包含一个单词,单词中只包含小写英文字母。

2017年度学科竞赛奖、科技竞赛奖评选方案

2017年度学科竞赛奖、科技竞赛奖评选方案 一、评选原则 1、学科竞赛奖、科技竞赛奖均为了鼓励广大同学通过积极参与各类赛事,提高自身素质,为校争光。 2、学科竞赛奖分为三个等级,一等奖3000元/人,二等奖2000元/人,三等奖1000元/人;科技竞赛奖分为三个等级,一等奖3000元/人,二等奖2000元/人,三等奖1000元/人。各个等级获奖人数按照当年参与竞赛的学生人数与获得奖励的质量确定。总获奖人数不超过总参赛人数的60%,总奖励金额均不超过20万元。 3、不能出现下列现象: A、某同学获得多个不同低赛事、低等级的竞赛奖,累加后得分相对较高,甚至高于某单个高赛事的得分。 B、某团队的成员在团队贡献上相对较低,但其单项得分与其他成员相同。 C、某团队的同一作品获得同一类型赛事奖励,在计算得分时出现累加情况。 D、非在校本科生参与评选。 二、各指标分值确定 1、影响因子 影响因子的确定两个部门比较一致,它与竞赛的名称有关,最高值为5分,以0.5分为刻度。以下为各个竞赛的影响因子:

2、等级分值 等级分值与竞赛级别和获奖等级均有关,最高值为100分,以

10分为刻度。以下为各个等级的分值: 3、作者排序 作者排序只与团队参与竞赛的作者排序有关,如提供作者排序的奖项,第一作者值为1,以后按照0.01的分值递减,即第二作者值为0.99,第三为0.98……

4、附加 获得不同竞赛奖励的同学,在累加得分时,减去附加值,附加值计算为:50*(获得竞赛奖励次数-1),如某同学获得3项奖励,则附加值为50*(3-1)=100。(因为竞赛最低得分不低于50分,故以50定为因子,若有竞赛得分低于50分,则直接取其竞赛项目最高分为最终得分)。 根据评选原则,为避免同一赛事相互累加,同一名同学在同一时间同一赛事不同项目获奖或者获得多个奖项,取该名同学在该赛事中获得的最高级奖项计算。

第七届蓝桥杯C++程序设计大学B组省赛题目

第七届蓝桥杯程序设计大学B组省赛题目 第一题:煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 第二题:生日蜡烛 某君从某年开始每年都举办一次生日,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日的? 请填写他开始过生日的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 第三题:凑算式 B A + + = 10 C (如果显示有问题,可以参见【图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

蓝桥杯七届单片机开发组决赛试题

第七届蓝桥杯单片机设计与开发组总决赛试题 “电压、频率采集设备任务书” 功能简述 “电压、频率采集设备”能够实现测量信号频率和电压,修改、储存工作参数,记录、查询事件等功能,系统由按键单元、ADC 采集单元、显示单元、储存单元组成,系统框图如图1所示: 图1.系统框图 I2C 总线、DS1302时钟芯片时序控制程序、CT107D 单片机考试平台电路原理图以及本题涉及到的芯片数据手册,可参考计算机上的电子文档。原理图文件、程序流程图及相关工程文件请以考生号命名,并保存在计算机上的考生文件夹中(文件夹名为考生准考证号,文件夹位于Windows 桌面上)。单片机 数码管显示 电压测量频率测量E2PROM 实时时钟 矩阵键盘

任务设计及要求 1.频率信号测量 使用竞赛板NE555方波信号发生器产生用于频率测量功能测试的方波信号,信号频率范围为500Hz --20KHz,电位器RB3调节信号频率,可使用“跳线帽”将单片机P34引脚与方波信号发生器输出引脚NET_SIG 短接。 2.电压信号测量 使用竞赛板上RB2电位器输出测试电压信号,信号输出范围0V-5V。 3.实时时钟功能 读取DS1302实时时钟芯片,并通过数码管显示时间数据,设备上电后初始化时间配置为23时59分55秒。 4.记录与输出功能 根据给定硬件的性能参数,设计合理的采样周期,当电压低于电压下线V L 或高于电压上线V H 时,将事件类型和发生时间保存到E2PROM 中。设备中 只需要保存最近一次发生的电压波动情况,数据储存格式可自定义。 上图例,电压连续变化过程中,在T1和T2时刻会触发事件记录功能。 5.显示与按键控制 5.14x4矩阵键盘按键功能定义图2所示: 图2.按键功能定义S7 S11S15S19S6 S10S14S18S5 S9S13S17S4S8S12S16时钟加电压减频率查询功能空

蓝桥杯比赛相关事项

蓝桥杯比赛相关事项 1.竞赛时间 省赛时长:4小时,6个组别同时进行。 决赛时长:4小时。决赛详细赛程安排另行通知。 详细赛程安排另行通知。 2.竞赛形式 个人赛。 一人一机,全程机考。 选手机器通过局域网连接到各个考场的竞赛服务器。选手答题过程中不允许访问互联网,也不允许使用本机以外的资源(如USB连接)。 以“服务器-浏览器”方式发放试题、回收选手答案。 3.c/c++ 语言开发环境: ·Dev-cpp 5.4.0 支持ANSI C,ANSIC++,STL ·c/c++ API 帮助文档(中文,chm格式) 4.试题形式 竞赛题目完全为客观题型。 根据选手所提交答案的测评结果为评分依据。 5.1.结果填空题 ·题目描述一个具有确定解的问题。要求选手对问题的解填空。 ·不要求解题过程,不限制解题手段(可以使用任何开发语言或工具,甚至是手工计算),只要求填写最终的结果。 5.2.代码填空题 ·题目描述一个具有确定解的问题。 ·题目同时给出该问题的某一解法的代码,但其中有缺失部分。 要求选手读懂代码逻辑,对其中的空缺部分补充代码,使整段代码完整。只填写空缺部分,不要填写完整句子。 不要写注释、说明或其它题目中未要求的内容。 5.3.编程大题 题目为若干具有一定难度梯度、分值不等的编程题目。 这些题目的要求明确、答案客观。 题目一般要用到标准输入和输出。要求选手通过编程,对给定的标准输入求解,并通过标准输出,按题目要求的格式输出解。题目一般会给出示例数据。 一般题目的难度主要集中于对算法的设计和逻辑的组织上。理论上,选手不可能通过猜测或其它非编程的手段获得问题的解。 选手给出的解法应具有普遍性,不能只适用于题目的示例数据(当然,至少应该适用于题目的示例数据)。 为了测试选手给出解法的性能,评分时用的测试用例可能包含大数据量的压力测试用例,选手选择算法时要尽可能考虑可行性的问题。

第十届蓝桥杯全国软件和信息技术专业人才大赛

第十届蓝桥杯全国软件和信息技术专业人才大赛 报名指南 一、学生: 1.参赛学生须登录大赛官网https://www.doczj.com/doc/1b13556276.html,完成如下报名流程(每个步骤不可省 略): (1)注册账号(已注册学生用原账号登录)。 (2)学籍身份认证(验证学生实名信息和所属院校信息)。 a) 学生实名认证信息包括:姓名、证件号码、2寸彩色证件照电子版(证件照如不规范将会审核失败,须重新上传)及身份证正反面照片;

b)学生填写所在院系认证:学校、学历、入学及毕业时间、所在院系以及学生证照片等;如学生教育经历发生变更,可以通过“添加更多教育经历”提交审核进行重新认证。

(3)选择报名科目和组别。 (4)选择院校缴费或个人缴费(如确定由院校组织报名和缴费的学生请选择院校缴费,学生相关报名信息将会出现在院校账号中,由院校老师统一完成后续筛选、报名及缴费工作。如学生不确定是否院校给统一报名缴费,请联系院校老师确认。如院校不统一组织报名或者未给学生报名,学生可选择个人报名并缴费,非211院校个人报名缴费功能将在院校报名工作完成后开放,预计在12月中旬开放,211院校不受此时间限制)。 (5)院校缴费/个人缴费成功后,学生报名工作完成。 (6)准考证下载(赛前一周可登录报名系统下载准考证并打印,按照准考证上的比赛时间和地点准时参加比赛)。 (7)奖项查询(赛后在报名系统内查询)。 2.证书申领:学生获奖后不仅将获得大赛获奖证书(不用申领),学生和其指导教师还 可自愿申领由工业和信息化部人才交流中心颁发的全国软件/电子行业人才证书,以及由IBM公司颁发的IBM国际认证证书,详情请登录大赛官网查询。 3.蓝桥招聘:依托于工业和信息化部人才交流中心,致力于打造以(专/本/硕/博)应 届高校毕业生为中心的专业互联网招聘平台,创新「人才经纪人」服务模式为每位求

第十一届蓝桥杯Python规则及样题

蓝桥杯大赛青少组竞赛规则及样题蓝桥杯大赛青少年组对外发布文档邮件pugongying@https://www.doczj.com/doc/1b13556276.html, 网站https://www.doczj.com/doc/1b13556276.html, 蓝桥杯大赛组委会北京万寿路27号工业与信息化部8号楼文档编号L00205对本文档的疑问及修正意见,请直接发送至上列邮箱。蓝桥杯大赛青少年创意编程Python 组竞赛规则及样题版本190901目录竞赛时长............................................................................................................................2竞赛形式. (2) 参赛选手设备环境............................................................................................................2试题形式............................................................................................................................2试题涉及的Python 知识................................................................................................3试题涉及的学科知识........................................................................................................4样题....................................................................................................................................4其他注意事项....................................................................................................................5联系方式............................................................................................................................6附录:蓝桥杯大赛青少年组简介.................................................................................... 6

(完整)蓝桥杯大赛青少年创意编程Scratch初级组模拟题

一、单选题(每题20分) 1、(难度系数1)在舞台添加小猫角色,它的所有设置均为默认设置。舞台布局和程序运行舞台布局程序运行结果 运行以下哪段程序后,可以得到以上结果。() A B C D以上程序都不对 2、(难度系数2)小猫看到远处好久不见的朋友,于是跳起来说“你好!”想引起朋友的注意,执行以下程序后,小猫说“你好!”一共几秒?() A 0 B 2 C4 D 8

3、(难度系数3)当角色执行完这段程序后,舞台可能出现的图形是?() A、正三角形 B、正四边形 C、正六边形 D、正八边形 4、(难度系数4)执行完这段程序后,变量b的值可能是?() A、11 B、65 C、130 D、6065

5、(难度系数5)小红想做一个月亮围绕地球旋转的动画,如图,舞台有两个角色:“地球”“月球”,并写如下程序,小红希望运行程序后,月球以地球为中心做圆周运动。() A、B、 B、D、

1、难度系数2,满分50分 准备工作:导入背景库中的“bedroom2”,并导入角色库中的“Abby”“Candy”角色。 编程实现: Abby打扫完房间,房间停电了,Abby点上了一根蜡烛。想象停电后,点上蜡烛的效果。 图1.“关灯以前” 图2.“关灯后”

1、程序开始运行时,显示如图1.“关灯以前” 2、2秒以后,背景变暗,屏幕左边的墙上出现比小猫自身还要大的影子,如图2.“关灯后”。 3、之后一直保持图2效果 4、蜡烛、Abby、影子之间和大小应大致正确。 将程序保存在桌面,命名为“1.sb2” 评判标准: 10分:程序运行后,按图1的效果显示并保持至少2秒钟; 30分:在10分的基础上,能按图2的要求背景变暗,出现Abby阴影; 50分:在30分的基础上,背景中的圣诞树仍可见,蜡烛、Abby、影子之间的位置关系 基本正确,Abby和影子的大小关系符号逻辑。 2、难度系数3,满分50分 编程实现:今天天气多云,小熊在海边散步,他的头顶飘来一朵云,一阵风吹来,云飘走了,越飘越远,最后消失在空中。 具体要求: 1、舞台背景选择图示背景,增加云朵、小熊角色。 2、程序开始运行时,“小熊”“云朵”角色出现在图1所示的位置。 3、“云朵”角色能实现“从小熊头顶飘离,并向右上角平滑地漂移,越飘越高,越飘越小,直到最后消失”的动画效果。 将程序保存在桌面,命名为“2.sb2” 图1 图2 图3 图4

2017届蓝桥杯省赛考题

2017第八届蓝桥杯Java省赛 1,标题:购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。 小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。 现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。 取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。 以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。 ----------------- **** 180.90 88折 **** 10.25 65折 **** 56.14 9折 **** 104.65 9折 **** 100.30 88折 **** 297.15 半价 **** 26.75 65折 **** 130.62 半价 **** 240.28 58折 **** 270.62 8折

**** 247.34 95折**** 73.21 9折**** 101.00 半价**** 79.54 半价**** 278.44 7折**** 199.26 半价**** 12.97 9折**** 166.30 78折**** 125.50 58折**** 84.98 9折**** 113.35 68折**** 166.57 半价**** 42.56 9折**** 81.90 95折**** 131.78 8折**** 255.89 78折**** 109.17 9折**** 146.69 68折**** 139.33 65折**** 141.16 78折**** 154.74 8折

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

第七届省赛 1.网友年龄 某君新认识一网友。 当问及年龄时,他的网友说: “我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提示:30岁就是其中一种可能哦. 请填写表示可能情况的种数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 7 x-y=3 2.生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 26 #include using namespace std; int main(){ int i,j; int sum=0; for(i=1;i<=100;i++){ //年龄 sum=0; for(j=i;j<=100;j++){ //蜡烛数 sum=sum+j; if(sum==236){ cout<

3.方格填数 如下的10个格子 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 //用dfs求 #include #include #include using namespace std; const int maxn=4; int mp[maxn][maxn]; int flag[10]; int ans=0; int init() { memset(mp,-10, sizeof mp); memset(flag,0, sizeof flag); } int fx[4]= {0,-1,-1,-1},fy[4]= {-1,-1,0,1}; int check(int i,int j) { for(int f=0; f<4; f++) { if(abs(mp[i][j]-mp[i+fx[f]][j+fy[f]])!=1||i+fx[f]<1||j+fy[f]>4||j+fy[f]<1 ) continue; else return 0; } return 1; } void dfs(int i,int j) {

第十届蓝桥杯青少赛Scratch组试题

上表由裁判填写,请参赛选手及阅卷裁判签名确认上述成绩准确无误,选手_________、裁判_________ 注意事项: 1.赛场内应保持安静,参赛选手间严禁互相交谈,违者将被取消比赛资格; 2.比赛过程中,笔记本计算机不得开启WLAN或蓝牙等各种无线通讯功能,违者将被取消比赛资格; 3.比赛过程中,应将准考证及身份证件放置桌子左上角,以备监考人员随时核对、检查; 4.参赛选手的手机在检录后必须保持关闭状态直至比赛结束,违者将被取消比赛资格; 5.比赛过程中,笔记本电脑须调为静音; 6.请在做题之前认真阅读题目,编程题目设置有步骤分,即只完成部分功能也可以得到相应的分数; 7.比赛答卷时间为90分钟; 8.比赛结束后,请自行整理所有自带设备及配件,并妥善带出赛场,尤其不要遗漏电源、连线或其他零部 件; 9.比赛结束时裁判现场判卷结束后,本赛卷一律交给判卷裁判,比赛选手不得自行带走,否则取消比赛成 绩。

一、单选题(每题20分) 第一题(难度系数1) 看,前方有一个苹果!想一想,下面哪段程序能帮助小猫拿到它呢? A B C D 第二题(难度系数2) 以下哪个选项不是说积木的结果? A: 7 B: 18 C: 3 D: 21

小法师被挡在墙外面,他要施展法术穿墙而过。除了“隐藏”积木块之外,还有哪个积木块可以帮他穿墙而过?A: B: C: D: 第四题(难度系数4) 角色小猫在运行如下程序5秒后,舞台上能看到几只小猫? A: 2 B: 3 C: 4 D: 5

运行上面的程序,角色说的结果为? A: 1 B: 2 C: 3 D: 4 二、判断题(每题20分,在括号里画“×”或“√”)第一题(难度系数1) 执行完这段程序后,可以在舞台上画出一条蓝色的直线。()

第七届蓝桥杯嵌入式比赛决赛赛题

密 封 线 ----------------------------------------------------------------------------- 2016年“蓝桥杯” 第七届全国软件和信息技术专业人才大赛个人赛 (电子类)决赛嵌入式设计与开发项目 “温湿度监控设备”设计任务书 功能简述 “温湿度监控设备”通过采集传感器输出电压信号和信号频率得到环境温湿度数据,并 能够根据设定的温湿度阈值执行相应动作,系统框图如图1所示: 图1 系统框图 CT117E 考试板电路原理图与使用说明、I2C 总线驱动、LCD 驱动程序及本题涉及到的芯片资料可参考计算机上的电子文档。电路原理图、程序流程图及相关工程文件请以考生准考证命名,并保存在指定文件夹中(文件夹名为考生准考证号,文件夹保存在监考员指定位置)。

设计任务及要求 1.温度测量功能 通过竞赛板上电位器R37输出电压模拟温度传感器输出信号,温度测量范围为-20℃ ~60℃,电压温度关系为如下式所示: T = k*V R37 + b,其中T代表环境温度,V R37为电位器输出信号,k、b 为常数,0V 时对应温度为-20℃,3.3V对应60℃。 2.湿度测量功能 通过竞赛板PA7引脚检测输入信号频率,相对湿度测量范围为10%~90%,频率湿度关系如下式所示: H = m*F + n,其中H代表环境湿度,F为传感器输入到设备信号频率,m、n 为常 数,1KHz对应相对湿度为10%,10KHz对应90%。 3.测试信号 通过竞赛板PA1引脚输出频率1KHz到10KHz方波,模拟湿度传感器输出信号。 4.参数设置与数据记录功能 可以通过按键设定温、湿度上限和数据采样间隔,温湿度数据记录间隔可设置为1 - 5秒,要求至少保存60组数据,数据不需要写入FLASH或E2PROM存储器。 5.RTC功能 通过单片机片内RTC设计实现实时时钟功能。 6.按键功能定义 设备上电后,通过LCD显示实时温、湿度数据和数据记录次数,显示格式如图2所示: 图2. LCD显示界面参考图(实时数据显示) B1按键:“功能”按键,按下后进入功能设定界面(如图3所示),再次按下B1按键时退出设置界面,保存用户设定的结果到E2PROM,并返回图2所示的实时数据显示界 面。 参数设置 温度上限:40℃ 湿度上限:80% 采样间隔:1S 测试信号: 1.5KHz 图3. LCD显示界面参考图(阈值设置界面)

2016年第七届蓝桥杯初赛试题

第一题: 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 第二题: 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 第三题: 凑算式

B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。 这个算式一共有多少种解法? 注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。 第四题: 快速排序 排序在各种场合经常被用到。 快速排序是十分常用的高效率的算法。 其思想是:先选一个“标尺”, 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于它。 这样,排序问题就被分割为两个子区间。 再分别对子区间排序就可以了。

下面的代码是一种实现,请分析并填写划线部分缺少的代码。#include void swap(int 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(ix); if(i>=j) break; swap(a,i,j); } ______________________; return j; } void quicksort(int a[], int p, int r) { if(p

相关主题
文本预览
相关文档 最新文档