当前位置:文档之家› 2016第七届蓝桥杯CC++-B组题解

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

2016第七届蓝桥杯CC++-B组题解
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()

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 DEF

A + — + -——— = 10

C GHI

(如果显示有问题,可以参见【图1.jpg】)

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:

6+8/3+952/714 就是一种解法,

5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

这个题不多说了,直接暴力生成9的全排列然后去验证等式是否成立,只是验证的时候如果防止精度问题可以通分把除法变成乘法。

答案是:29

1.#include

2.int ans = 0;

3.int num[10];

4.bool visit[10];

5.

6.void Solve()

7.{

8.double sum = num[0] + (double)num[1] / num[2] + (double)(num[3]*100

+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]);

9.if(sum == 10)

10. {

11. ans ++;

12. }

13.}

14.

15.void dfs(int index)

16.{

17.if(index == 9)

18. {

19. Solve();

20.return ;

21. }

22.for(int i = 1 ; i < 10 ; i ++)

23. {

24.if(!visit[i])

25. {

26. visit[i] = true;

27. num[index] = i;

28. dfs(index+1);

29. visit[i] = false;

30. }

31. }

32.}

33.

34.int main()

35.{

36. dfs(0);

37. printf("%d\n",ans);

38.return 0;

39.}

第四题:

快速排序

排序在各种场合经常被用到。

快速排序是十分常用的高效率的算法。

其思想是:先选一个“标尺”,

用它把整个队列过一遍筛子,

以保证:其左边的元素都不大于它,其右边的元素都不小于它。这样,排序问题就被分割为两个子区间。

再分别对子区间排序就可以了。

下面的代码是一种实现,请分析并填写划线部分缺少的代码。#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(i

while(a[--j]>x);

if(i>=j) break;

swap(a,i,j);

}

______________________;

return j;

}

void quicksort(int a[], int p, int r)

{

if(p

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

printf("\n");

return 0;

}

注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。

这个题目如果接触过快排,了解过快速排序的原理的应该是送分题目,只不过快排单步(就是将一堆数按照某个数作为基准数分成左右两堆)这个实现方式有几种代码表现。在这里答案是swap(a,p,j).

第五题:

抽签

X星球要派出一个5人组成的观察团前往W星。

其中:

A国最多可以派出4人。

B国最多可以派出2人。

C国最多可以派出2人。

....

那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。

数组a[] 中既是每个国家可以派出的最多的名额。

程序执行结果为:

DEFFF

CEFFF

CDFFF

CDEFF

CCFFF

CCEFF

CCDFF

CCDEF

BEFFF

BDFFF

BDEFF

BCFFF

BCEFF

BCDFF

BCDEF

....

(以下省略,总共101行)

#include

#define N 6

#define M 5

#define BUF 1024

void f(int a[], int k, int m, char b[])

{

int i,j;

if(k==N){

b[M] = 0;

if(m==0) printf("%s\n",b);

return;

}

for(i=0; i<=a[k]; i++){

for(j=0; j

______________________; //填空位置

}

}

int main()

{

int a[N] = {4,2,2,1,1,3};

char b[BUF];

f(a,0,M,b);

return 0;

}

仔细阅读代码,填写划线部分缺少的内容。

注意:不要填写任何已有内容或说明性文字。

这个题目是这样的,对于f(int a[],int k,int m,char b[]).a[] 是每个国家的最多指派人数,k 表示当前是哪个国家,m表示还需要派送几个人(可以为负数).b表示已经派送的人的字符串。

所以这个题目在递归中间的的第一个循环表示从0~a[i]中让i国选择指派人数,内循环只是向b[]记录的过程。

所以答案是f(a,k+1,m-i,b). 因为这里I = j .应该 f(a,k+1,m-j,b)也可以。

第六题:

方格填数

如下的10个格子

(如果显示有问题,也可以参看【图1.jpg】)

填入0~9的数字。要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)

一共有多少种可能的填数方案?

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

这个题目题目有点表述不明,不知道0~9 可不可以重复使用。我当时做的时候是当作不可以重复使用来处理的。那么这里我就先当作不可重复使用来讲解。

这里题目还是一样先往里面填数。用生成排列的形式。填写完了之后再判断是否可行。答案是:1580

1.#include

2.#include

3.int flag[3][4]; //表示哪些可以填数

4.int mpt[3][4]; //填数

5.bool visit[10];

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. flag[i][j] = 1;

13. flag[0][0] = 0;

14. flag[2][3] = 0;

15.}

16.

17.void Solve()

18.{

19.int dir[8][2] = { 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(flag[i][j] == 0)continue;

27.for( int k = 0 ; k < 8 ; k ++)

28. {

29.int x,y;

30. x = i + dir[k][0];

31. y = j + dir[k][1];

32.if(x < 0 || x >= 3 || y < 0 || y >= 4 || flag[x][y ] == 0) continue;

33.if(abs(mpt[x][y] - mpt[i][j]) == 1) book = false;

34. }

35. }

36. }

37.if(book) ans ++;

38.}

39.

40.

41.void dfs(int index)

42.{

43.int x,y;

44. x = index / 4;

45. y = index % 4;

46.if( x == 3)

47. {

48. Solve();

49.return;

50. }

51.if(flag[x][y])

52. {

53.for(int i = 0 ; i < 10 ; i ++)

54. {

55.if(!visit[i])

56. {

57. visit[i] = true;

58. mpt[x][y] = i;

59. dfs(index+1);

60. visit[i] = false;

61. }

62. }

63. }

64.else

65. {

66. dfs(index+1);

67. }

68.}

69.int main()

70.{

71. init();

72. dfs(0);

73. printf("%d\n",ans);

74.return 0;

75.}

第七题:

剪邮票

如【图1】, 有12张连在一起的12生肖的邮票。

现在你要从中剪下5张来,要求必须是连着的。

(仅仅连接一个角不算相连)

比如,【图2】,【图3】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

其实这个题目还是可前面的一样,先生成,再判断是否可行。这里我们可以先用搜索从12个数里面将所有5个数的组合找出来。然后再用深搜判断这五个是否连在一起。答案是:116

1.#include

2.#include

3.int mpt[3][4];

4.int mpt_visit[3][4];

5.int num[6];

6.int have[13];

7.int visit[13];

8.int ans = 0;

9.int Count = 0;

10.

11.void init()

12.{

13.int k = 1;

14.for(int i = 0 ; i < 3 ; i ++)

15.for(int j = 0 ; j < 4 ; j ++)

16. {

17. mpt[i][j] = k;

18. k ++;

19. }

20.}

21.int dir[4][2] = {0,1,0,-1,-1,0,1,0};

22.//判断五个数是否能连在一起

23.void dfs_find(int x,int y)

24.{

25.for(int i = 0 ; i < 4 ; i++)

27.int tx,ty;

28. tx = x + dir[i][0];

29. ty = y + dir[i][1];

30.if(tx < 0 || tx >= 3 || ty < 0 || ty >= 4) continue;

31.if(have[mpt[tx][ty]] == 0 || mpt_visit[tx][ty])continue;

32. mpt_visit[tx][ty] = 1;

33. Count ++;

34. dfs_find(tx,ty);

35. }

36.}

37.

38.void Solve()

39.{

40.int i;

41. memset(have,0,sizeof(have));

42. memset(mpt_visit,0,sizeof(mpt_visit));

43.for(i = 1; i < 6 ; i ++) have[num[i]] = 1;

44.for(i = 0 ; i < 12 ; i ++)

45. {

46.int x,y;

47. x = i / 4;

48. y = i % 4;

49.if(have[mpt[x][y]])

50. {

51. Count = 1;

52. mpt_visit[x][y] =1;

53. dfs_find(x,y);

54.break;

55. }

56. }

57.if(Count == 5)

58. {

59. ans ++;

60. }

61.}

62.

63.//创建5个数的组合

64.void dfs_creat(int index)

65.{

66.if(index == 6)

67. {

68. Solve();

69.return;

71.for(int i = num[index-1] + 1; i < 13 ; i ++)

72. {

73.if(!visit[i])

74. {

75. visit[i] = true;

76. num[index] = i;

77. dfs_creat(index+1);

78. visit[i] = false;

79. }

80. }

81.}

82.

83.int main()

84.{

85. init();

86. dfs_creat(1);

87. printf("%d\n",ans);

88.return 0;

89.}

第八题:

四平方和

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多4个正整数的平方和。

如果把0包括进去,就正好可以表示为4个数的平方和。

比如:

5 = 0^2 + 0^2 + 1^2 + 2^2

7 = 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

资源约定:

峰值内存消耗< 256M

CPU消耗< 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

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

注意: main函数需要返回0

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

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

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

这个题目很水也是搜索能做的。但是有点技巧,这里我贡献两个方法给大家参考。

方法一:O(n^3/2).先暴力枚举前三个数然后做减法判断差是否为一个完全平方数即可。当然虽然这个题目是n^3/2看数据貌似过不了。但是貌似我找了几组数据都能秒出结果。应该是绝大多数最外层循环都不会太多。

1.#include

2.#include

3.int main()

4.{

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 - i*i - j*j - k*k;

14.double l = sqrt((double) temp);

15.if(l == (int)l )

16. {

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.}

方法二:O(n) 的方法。这个方法是我在比赛的时候用的。先把两个平方数能相加的到的数字球出来然后记录。这样我们第三层循环就可以先判断再循环了。

1.#include

2.#include

3.int mpt[5000010] ={0}; //mpt[i] = 1表示i 能够用两个完全平方数相加而得。

4.int n;

5.void init()

6.{

7.for(int i = 0 ; i*i <= n ; i ++)

8.for(int j = 0 ; j*j <=n ; j ++)

9.if(i*i+j*j <= n) mpt[i*i+j*j] = 1;

10.}

11.int main()

12.{

13.

14.int flag = false;

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(mpt[n - i*i - j*j] == 0) continue; //如果剩下的差用

两个完全平方数不能组合出来就不继续

21.for(int k = 0 ; k * k <= n ; k ++)

22. {

23.int temp = n - i*i - j*j - k*k;

24.double l = sqrt((double) temp);

25.if(l == (int)l )

26. {

27. printf("%d %d %d %d\n",i,j,k,(int)l);

28. flag = true;

29.break;

30. }

31. }

32.if(flag)break;

33. }

34.if(flag)break;

35. }

36.return 0;

37.}

第九题:

交换瓶子

有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 ,不能通过工程设置而省略常用头文件。

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

啊啊这个题目最开始没看到最上面的那句话,以为输入的数字是随意的int.还做了离散化处理。后来看到了编号为1~n就觉得自己傻逼了。

这个题目我用的贪心,从左向右如果当前第i个瓶子编号不是i就把编号为i的瓶子换过来。自己yy几发数据貌似都能过。不清楚是否对。

因为这里的n规模为10000,如果在交换的时候去用for找编号为i的瓶子在哪儿时间复杂度为O(n^2)会超时。

所以这里要用两个数组,一个数组是记录第i个瓶子编号为多少,一个是记录编号为i 的瓶子在哪儿。注意我们在交换的时候要把这两个数组都维护!

1.#include

2.#include

3.int arr[10010];

4.int flag[10010];

5.int main()

6.{

7.int ans = 0;

8.int n,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.}

第十题:

最大比例

X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。

并且,相邻的两个级别间的比例是个固定值。

也就是说:所有级别的奖金数构成了一个等比数列。比如:

16,24,36,54

其等比值为:3/2

现在,我们随机调查了一些获奖者的奖金数。

请你据此推算可能的最大的等比值。

输入格式:

第一行为数字N,表示接下的一行包含N个正整数

第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额

要求输出:

一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数

测试数据保证了输入格式正确,并且最大比例是存在的。

例如,输入:

3

1250 200 32

程序应该输出:

25/4

再例如,输入:

4

3125 32 32 200

程序应该输出:

5/2

再例如,输入:

3

549755813888 524288 2

程序应该输出:

4/1

资源约定:

峰值内存消耗< 256M

CPU消耗< 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

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

注意: main函数需要返回0

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

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

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

这个题目刚开始没准备做后来感觉时间蛮充裕的(上次吃了时间的亏这次自己吧时间卡的比较死,一个小时做完了填空题,一个半小时做完了前面两道大题。所以还剩下一个半小时.)想了一会儿感觉这个题可做。自己YY了一下。不保证一定正确,可以当作一个参考!

这个题目意思是相邻两个等级的奖金比例一定是一个相同的分数P(P = A/B, A/B为最简分数).题目告诉了你n个人分别领取了多少奖金。让你算这个P最大为多少。

我是这么处理的,我们先把n个人的奖金从大到小排序。剔除掉相同的(相同的奖金只保留一个)。然后前后做除用分数的形式保留前后两个数的比例。如何用分数表示两个数的最简分数呢。例如A / B = (A/Gcd(A,B)) / (B/Gcd(A,B))。只要把A,B最大公约数去除掉就可以了。

现在得到了一堆堆分数Fs[i]然后怎么处理呢?我们知道这些分数一定都满足一个条件就是 Fs[i] = P^ki 这里的ki是不定的。但是要使得求得P最大,那么一定是所有ki 求最大公约数得到k' .结果就是P*k'. 然而这道题数据太大了,并不容易求出这些分数对应的底数以及各自的指数。那么这个方案就不可取了。所以我们要的到结果并不能先求出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

2.#include

3.#include

https://www.doczj.com/doc/741215803.html,ing namespace std;

5.#define LL long long

6.struct fs

7.{

8. LL up,down;

9.};

10.int n;

11.LL arr[110];

12.fs Fs[110];

13.

14.bool cmp(LL a,LL b)

15.{

16.return a > b;

17.}

18.

19.LL Gcd(LL a,LL b)

20.{

21.if( b == 0 )return a;

22.return Gcd(b,a%b);

23.}

24.LL Get(LL a, LL b)

25.{

26.if( a < b) a ^= b ^= a ^= b;

27. LL v[30];

28. queueteam;

29.if( a == b || a / b == a) return b;

30. v[0] = a, v[1] = b;

31. v[2] = a / b;

32.int top = 3,i,j;

33. team.push(a/b);

34.while(team.size())

35. {

36. LL now = team.front();

37. team.pop();

38.for(i = 0 ; i < top ; i ++)

39. {

40. LL temp = (v[i] > now) ? v[i] / now : now / v[i];

41.bool find = false;

42.for(j = 0 ; j < top ; j ++)

43.if( v[j] == temp) find = true;

44.if(find == true) continue;

45. team.push(temp);

46. v[top++] = temp;

47. }

48. }

49. LL ans = v[0];

50.for(i = 0 ; i < top ; i ++)

51.if(v[i] != 1)

52. {

53. ans = v[i];

54.break;

55. }

56.for(i = 0 ; i < top ; i ++)

57.if( v[i] < ans && v[i] != 1) ans = v[i];

58.return ans;

59.}

60.int main()

61.{

62.int i,j;

63. scanf("%d",&n);

64.for(i = 0 ; i < n ; i ++) scanf("%lld",&arr[i]);

65. sort(arr,arr+n,cmp);

66.int top = 1;

67.for(i = 1; i < n ; i ++)

68.if(arr[i] != arr[i-1]) arr[top++] = arr[i];

69. n = top;

70.for(i = 0 ; i < n - 1; i ++)

71. {

72. LL gcd = Gcd(arr[i],arr[i+1]);

73. Fs[i].up = arr[i] / gcd;

74. Fs[i].down = arr[i+1] / gcd;

75. }

76. LL x = Fs[0].up;

77.for(i = 0 ; i < n - 1 ; i ++)

78. x = Get(x,Fs[i].up);

79. LL y = Fs[0].down;

80.for(i = 0 ; i < n - 1; i ++)

81. y = Get(y,Fs[i].down);

82. printf("%lld/%lld\n",x,y);

83.return 0;

84.}

蓝桥杯c c 省赛试题及答案解析

2016蓝桥杯c-c++B组省赛试题及解析 第一题 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

答案:171700 #include<> int main() { int a[101] ={0}; for(int i = 1 ; i < 101 ; i ++) a[i] = a[i-1] + i; int ans = 0; for(int j = 1 ; j < 101 ; j ++) ans += a[j]; printf("%d\n",ans); return 0; }

第二题 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 答案:26 #include<> int main()

{ int start,end; for(start = 1 ; start < 236 ; start ++) { for( end = start ; end < 236 ; end ++ ) { int sum = 0; for(int i = start; i <= end; i ++) sum += i; if( sum == 236) { printf("start : %d end : %d\n",start,end); } } }

2016年度蓝桥杯java高职C组

2016年蓝桥杯Java C组考试题(考试日期2016/3/20日)第一题: 有奖猜谜 小明很喜欢猜谜语。 最近,他被邀请参加了X星球的猜谜活动。 每位选手开始的时候都被发给777个电子币。 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为止。 小明一共猜了15条谜语。 战果为:vxvxvxvxvxvxvvx 其中v表示猜对了,x表示猜错了。 请你计算一下,小明最后手里的电子币数目是多少。 请填写表示最后电子币数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 public static void main(String[] args) { int n=777; for(int i=1;i<=12;i++) { if(i%2!=0) { n=n*2; } else n=n-555; } n=n*2; n=n*2; n=n-555; System.out.println(n); } 答案:58497

第二题: 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 public static void main(String[] args) { int sum[]=new int[101]; int sum1=0; int s=0; for(int i=1;i<=100;i++) { sum1=sum1+i; sum[i]=sum1; s=s+sum[i]; } System.out.println(s); } 答案:171700 第三题: 平方怪圈 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。 对新产生的正整数再做同样的处理。 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环圈。 请写出这个循环圈中最大的那个数字。

蓝桥杯2016年JavaB组省赛题

2016年JavaB组省赛题 1.煤球数目 (结果填空) 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 2.生日蜡烛 (结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 3.凑算式 (结果填空) B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表0~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法? 注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。 5.抽签 (代码填空) X星球要派出一个5人组成的观察团前往W星。 其中: A国最多可以派出4人。 B国最多可以派出2人。 C国最多可以派出2人。 .... 那么最终派往W星的观察团会有多少种国别的不同组合呢? 下面的程序解决了这个问题。 数组a[] 中既是每个国家可以派出的最多的名额。 程序执行结果为: DEFFF CEFFF CDFFF CDEFF CCFFF CCEFF CCDFF CCDEF BEFFF BDFFF BDEFF BCFFF BCEFF BCDFF BCDEF

第七届蓝桥杯大赛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所示的工作模式和剩余工作时间

2016蓝桥杯C语言算法题

/* 算法训练新生舞会 问题描述 新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。 输入格式 第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。 之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。 输出格式 对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。 样例输入 4 John 10 M Jack 11 M Kate 20 F Jim 21 M 3 John 11 20 Jack Jim Jack 样例输出 N Y N 提示 可以把名字和学号都当成字符串处理。可以按以下流程实现。 #include #include using namespace std; struct tstudent { char name[21];

char num[21]; char sex; }; void readdata(tstudent student[], int n) { 输入N个学生的信息 } intfindstudent(tstudent student[], int n, char* data) { if (data == NULL) return -1; 判断是否有某个学生的学号或名字等于data,如果有,函数返回该学生在student数组中的序号,否则返回-1 } void solve(tstudent student[], int n, int m) { char x[21], y[21]; for (inti=0; i>n; readdata(student, n); cin>>m; solve(student, n, m); } */ #include #include #define MaxSize 1000+5 typedef struct {

蓝桥杯练习系统题目汇总

蓝桥杯练习系统题目汇总: 入门训练 1. Fibonacci数列 问题描述 Fibonacci数列的递推公式为:F n=F n-1+F n-2,其中F1=F2=1。 当n比较大时,F n也非常大,现在我们想知道,F n除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10007的余数。 说明:在本题中,答案是要求F n除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出F n的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 样例输入 10 样例输出 55 样例输入 22 样例输出 7704 数据规模与约定 1 <= n <= 1,000,000。 参考代码:c++ 1.#include 2.#include 3.#define MOD 10007 4.#define MAXN 1000001 5.int n, i, F[MAXN]; 6.int main() 7.{ 8.scanf("%d", &n); 9.F[1] = 1; 10.F[2] = 1; 11.for(i = 3; i <= n; ++i) 12.F[i] = (F[i-1] + F[i-2]) % MOD; 13.printf("%d\n", F[n]); 14.return0; 15.}

java: 1.import java.util.Scanner; 2.public class Main{ 3.public static void main(String[] args) { 4.Scanner scanner = new Scanner(System.in) ; 5.int num = scanner.nextInt() ; 6.int[] a = new int[num+2] ; 7.a[1] = a[2] = 1; 8.if(num == 1) { 9.a[num] = 1 ; 10.}else if(num == 2) { 11.a[num] = 1 ; 12.}else{ 13.for(int i = 3; i <= num; i++) { 14.a[i] = (a[i - 1] + a[i - 2] ) % 10007 ; 15.} 16.} 17.System.out.println(a[num]); 18.} 19.} 2. 实数输出 问题描述 给定圆的半径r,求圆的面积。 输入格式 输入包含一个整数r,表示圆的半径。 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。 说明:在本题中,输入是一个整数,但是输出是一个实数。 对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。 实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。 样例输入 4 样例输出 50.2654825 数据规模与约定

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.return0;

12.} 第二题: 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 呵呵,水题,但是出题人不严谨啊!!!怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了。 蓝桥杯这种不像acm的题目的,能暴力直接暴力。不用想太多。直接从1~236 枚举 start, end 分别表示他开始过生日的年龄和今年的年龄,然后计算之间吹蜡烛的总和如果等于236就输出 start ,end. 答案是:26 1.#include 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.{

2016蓝桥杯c-c++省赛试题及答案解析

2016蓝桥杯c-c++B组省赛试题及解析第一题 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 答案:171700 #include int main() { int a[101] ={0};

for(int i = 1 ; i < 101 ; i ++) a[i] = a[i-1] + i; int ans = 0; for(int j = 1 ; j < 101 ; j ++) ans += a[j]; printf("%d\n",ans); return 0; } 第二题 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 答案:26

#include int main() { int start,end; for(start = 1 ; start < 236 ; start ++) { for( end = start ; end < 236 ; end ++ ) { int sum = 0; for(int i = start; i <= end; i ++) sum += i; if( sum == 236) { printf("start : %d end : %d\n",start,end); } } } return 0; } 第三题 凑算式

蓝桥杯比赛相关事项

蓝桥杯比赛相关事项 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.编程大题 题目为若干具有一定难度梯度、分值不等的编程题目。 这些题目的要求明确、答案客观。 题目一般要用到标准输入和输出。要求选手通过编程,对给定的标准输入求解,并通过标准输出,按题目要求的格式输出解。题目一般会给出示例数据。 一般题目的难度主要集中于对算法的设计和逻辑的组织上。理论上,选手不可能通过猜测或其它非编程的手段获得问题的解。 选手给出的解法应具有普遍性,不能只适用于题目的示例数据(当然,至少应该适用于题目的示例数据)。 为了测试选手给出解法的性能,评分时用的测试用例可能包含大数据量的压力测试用例,选手选择算法时要尽可能考虑可行性的问题。

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

第七届蓝桥杯单片机设计与开发组总决赛试题 “电压、频率采集设备任务书” 功能简述 “电压、频率采集设备”能够实现测量信号频率和电压,修改、储存工作参数,记录、查询事件等功能,系统由按键单元、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时钟加电压减频率查询功能空

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

2016年蓝桥杯C语言

2016年蓝桥杯C语言C组(专科)考试题 (考试日期2016/3/20) 第一题 报纸页数 X星球日报和我们地球的城市早报是一样的, 都是一些单独的纸张叠在一起而已。每张纸印有4版。 比如,某张报纸包含的4页是:5,6,11,12, 可以确定它应该是最上边的第2张报纸。 我们在太空中捡到了一张X星球的报纸,4个页码分别是: 1125,1126,1727,1728 请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)? 请填写表示总页数的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。第二题 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。第三题

平方怪圈 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。 对新产生的正整数再做同样的处理。 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环圈。 请写出这个循环圈中最大的那个数字。 请填写该最大数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。第四题 打印方格 小明想在控制台上输出m x n 个方格。 比如10x4的,输出的样子是: +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ (如果显示有问题,可以参见【图1.jpg】) 以下是小明写的程序,请你分析其流程,填写划线部分缺少的代码。

2016第七届蓝桥杯单片机项目模拟试题

密 封 线 ----------------------------------------------------------------------------- 全国软件和信息技术专业人才大赛模拟题 单片机设计与开发科目 “温度记录器”设计任务书 功能简述 设备按照用户通过按键设定的时间间隔自动采集并存储温度数据,并具有采集完成提醒、数码管显示等功能,系统硬件部分主要由按键电路、电源供电电路、RTC 时钟、传感器电路和显示电路组成。系统框图如图1所示: 图1. 系统框图 单总线驱动程序、DS1302芯片驱动程序、CT107D 单片机考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。程序流程图及相关工程文件请以考生号命名,并保存在计算机上的考生文件夹中(文件夹名为考生准考证号,文件夹位于 Windows 桌面上)。

设计任务及要求 1.数码管显示 1.1设备上电后,自动进入参数设置界面(图1)此时,通过按键S4切换4个温度 图1. 参数设置界面(上电默认) 按下按键S5,确认采集间隔时间,并退出参数设置界面(图1),进入时钟显示界 图2. 时钟显示界面 要求:时钟显示界面(图2)下,提示符1、2以1秒为间隔闪烁 1.2 当设备按照用户设定的采集间隔采集到10个数据后,指示灯L1闪烁提示本 次温度采集已经完成,此时进入数码管温度采集显示界面(图3): 图3. 温度采集显示界面 此时,按下S6,L1熄灭,按照时间先后顺序,切换显示设备内存储的温度数据; 按下S7按键进入参数设置界面(图1),待用户输入温度采集间隔之后,可以进行下一次的温度采集工作。 说明:索引指的是当前显示的温度按照采集时间先后顺序的编号(00-09)。 2.温度检测功能 使用DS18B20温度传感器完成温度测量功能。 3.RTC 使用DS1302时钟芯片完成RTC的相关功能。 4.设备工作模式说明 (1)默认RTC时间:23时59分50秒; (2)默认温度数据采集间隔为1秒; (3)设备处在不同的显示界面下,与该界面无关的按键操作无效; (4)温度数据最大存储容量:10个

2015年蓝桥杯A组试题及答案

2015蓝桥杯A组试题 方程整数解 方程: a^2 + b^2 + c^2 = 1000 (或参见【图1.jpg】) 这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。 你能算出另一组合适的解吗? 请填写该解中最小的数字。 10 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 #include"stdio.h" #include"windows.h" int main() { int a, b, c; for (a = 1; a < 31;a++) for (b= 1; b < 31; b++) for (c = 1; c < 31; c++)

if (a*a + b*b + c*c == 1000) printf("%d %d %d\n", a, b, c); } printf("%d %d %d",a,b,c); system("pause"); return 0; } 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。 请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。 21+31(2014年)+365(2015年)+366(2016年)=783;1000-783=217(2017年的第217天爆炸);31+28+31+30+31+30+31=212(2017年前七个月的天数);217-212=5(2017年第8个月的第五天爆炸)

2016蓝桥杯国赛模拟题

蓝桥杯”第七届全国软件和信息技术专业人才大赛嵌入式设计模拟试题 “电压测量监控设备”设计任务书 功能简述 设计一个电压测量监控设备,定时通过串口向PC 机发送电压值,通过串口接收系统配置参数并保存到E2PROM 中。设备硬件部分主要由电源部分、控制器单元、串口部分、存储单元组成,系统框图如图1所示: 控制器 按键x4 图 1 系统框图 CT117E 考试板电路原理图、I2C 总线驱动程序、LCD 驱动程序及本题涉及到的芯片资料可参考计算机上的电子文档。电路原理图、程序流程图及相关工程文件请以考生准考证命名,并保存在指定文件夹中(文件夹名为考生准考证号,文件夹位于Windows 桌面上)。 设计任务及要求 1. RTC 实时时钟 使用S TM32 内部R TC 完成相关功能,设备上电后,时间初始化为23 时59 分55 秒, 默认定时上报电压时间为0时0点0分。 2. ADC 测量功能 设备采集电位器R37 输出的电压信号V1,并通过L CD 显示。当V1>V DD*k 时,指示灯LD1 以0.2 秒为间隔闪烁,闪烁功能可以通过按键关闭;V DD 为3.3V;k 默认值为0.1,保存在E2PROM 中并可以通过串口修改配置。 3. 串行功能 3.1 设定k 值,可设置范围0.1 ~ 0.9 格式:【命令类型】【数值】【命令结束标志】举例: “k0.1\n”设置k 值为0.1;设备接收到命令执行后,回复“ok\n”。 3.2 定时上报电压V1 格式:【V1电压值】+【k 值】+【时间】【命令结束标志】举例: “2.21+0.1+123030\n” 12 时30 分30 秒上报电压值为2.21V,k 值为0.1

2016年第七届蓝桥杯大赛-团队赛活动细则

第七届蓝桥杯全国软件和信息技术专业人才大赛——社会公益项目团队赛 活动细则 二〇一六年一月

一、大赛概述 为贯彻落实《国务院关于积极推进“互联网+”行动的指导意见》有关精神,随着互联网的极速发展,海量参与、去中心化,让每个人都可以成为社会公益主体,跨界创新助力行业生态繁荣;互联网的发展,也让解决社会问题的项目运作变得更加高效、透明。为了打造互联网思维创新前沿,寻找聚焦社会问题的解决方案,培养大学生的社会责任感、创新意识和团队精神,促进大学生创新能力提高,蓝桥杯全国软件和信息技术专业人才大赛组委会特组织社会公益项目团 队赛。 本届社会公益项目团队赛参赛作品限定主题为社会公益主题领域,由每个参赛队提出一个解决某个社会公益问题领域的可行性方案或者项目。 二、竞赛总则 2.1 大赛原则 (1)关注社会问题分析的切入点 大学生是国家未来的社会精英,应该有很强的社会责任感。针对不同的社会问题,要有所感知,更重要的是提出建设性的改革/改变方案。社会问题的产生涉及多方面因素和利益,解决问题的切入点非常重要。 (2)来源现实需求,鼓励跨界创新 本团队赛参赛作品限定主题为社会公益项目领域,提交方案必须反映社会问题现实,寻找解决问题的切入点,面向真实应用。

(3)过程与结果并重,增强能力培养导向 大赛评比采用过程与结果并重的方式。在评估最终结果方案的同时,也关注任务方案的产生过程,关注团队采用的思路与方法论以及在此过程中体现出来的综合素质、团队意识与解决问题的能力,体现出重人才、重素质的评价导向。 评审方案如下表: 2.2参赛对象 由全日制普通高校在读的研究生、本科和高职高专学生(当年应届毕业生也可以参加)组成的团队。每队由 1名领队、1名顾问、2名指导老师、3~5名学生组成。其中,领队和指导老师可以兼任,顾问必须来自于校外的企业在职人员。 2.3 竞赛题目 本大赛聚焦社会公益问题领域,不以营利为唯一目标,跨界创新,便于广泛参与。参赛项目或者方案包括但不限于以下类型的解决方案或者项目: (1)环保问题:比如雾霾、水污染、垃圾处理、土地沙化、土地流失、生物多样性等。 (2)老年问题:比如老有所养、老有所乐、老有所为、老有所

2015年蓝桥杯A组试题及答案

2015蓝桥杯A组试题方程整数解 方程: a^2 + b^2 + c^2 = 1000 (或参见【图1.jpg】) 这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。 你能算出另一组合适的解吗? 请填写该解中最小的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 #include"stdio.h" #include"windows.h" int main() { int a, b, c; for (a = 1; a < 31;a++) for (b= 1; b < 31; b++) for (c = 1; c < 31; c++) { if (a*a + b*b + c*c == 1000)

printf("%d %d %d\n", a, b, c); } printf("%d %d %d",a,b,c); system("pause"); return 0; } 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。 请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。 21+31(2014年)+365(2015年)+366(2016年)=783;1000-783=217(2017年的第217天爆炸);31+28+31+30+31+30+31=212(2017年前七个月的天数);217-212=5(2017年第8个月的第五天爆炸) 大牛有用excel直接拖,用vbs算,路漫漫其修远兮......

2016第七届蓝桥杯大赛CC 大学C组省赛真题详解

第七届蓝桥杯大赛个人赛省赛(软件类) C/C++ 大学C组 一、试题 (2) 1、报纸页数 (2) 2、煤球数目 (2) 3、平方怪圈 (2) 4、打印方格 (2) 5、快速排序 (4) 6、凑算式 (5) 7、寒假作业 (6) 8、冰雹数 (6) 9、卡片换位 (7) 10、密码脱落 (9) 二、我的作答 (10) 1、2852 (10) 2、171700 (10) 3、145 (10) 4、for(col=0; col

一、试题 1、报纸页数 X星球日报和我们地球的城市早报是一样的, 都是一些单独的纸张叠在一起而已。每张纸印有4版。 比如,某张报纸包含的4页是:5,6,11,12, 可以确定它应该是最上边的第2张报纸。 我们在太空中捡到了一张X星球的报纸,4个页码分别是: 1125,1126,1727,1728 请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)? 请填写表示总页数的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 2、煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 3、平方怪圈 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。 对新产生的正整数再做同样的处理。 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环圈。 请写出这个循环圈中最大的那个数字。 请填写该最大数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 4、打印方格 小明想在控制台上输出m x n 个方格。 比如10x4的,输出的样子是: +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+

蓝桥杯所有题目

1.A+B问题 问题描述 输入A、B,输出A+B。 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。输入格式 输入的第一行包括两个整数,由空格分隔,分别表示A、B。 输出格式 输出一行,包括一个整数,表示A+B的值。 样例输入 12 45 样例输出 57 数据规模与约定 -10000 <= A, B <= 10000。 2.序列求和 问题描述 求1+2+3+...+n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值。 样例输入 4 样例输出 10 样例输入 100 样例输出 5050 数据规模与约定 1 <= n <= 1,000,000,000

3.圆的面积 问题描述 给定圆的半径r,求圆的面积。 输入格式 输入包含一个整数r,表示圆的半径。 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。 样例输入 4 样例输出 50.2654825 数据规模与约定 1 <= r <= 10000。 提示 本题对精度要求较高,请注意π的值应该取较精确的值。你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4。 4.Fibonacci数列 问题描述 Fibonacci数列的递推公式为:F n=F n-1+F n-2,其中F1=F2=1。 当n比较大时,F n也非常大,现在我们想知道,F n除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10007的余数。 说明:在本题中,答案是要求F n除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出F n的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 样例输入 10 样例输出 55 样例输入 22 样例输出 7704 数据规模与约定 1 <= n <= 1,000,000。

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