码迷,mamicode.com
首页 > 其他好文 > 详细

蓝桥杯之填空题集合1

时间:2015-04-06 18:36:39      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

1、最小公倍数

求两个数字的最小公倍数是很常见的运算。比如,3和5的最小公倍是15。6和8的最小公倍数是24。
下面的代码对给定的两个正整数求它的最小公倍数。请填写缺少的代码,使程序尽量高效地运行。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

1 int f(int a, int b)
2 {
3 int i;
4 for(i=a;;______)
5 {
6 if(i%b==0) return i;
7 }
8 }
技术分享
参考答案:i+=a
或者 i = i + a;

注意:i++
虽然可以得到正确结果,但不符题意(高效运行),不给分。
View Code

 

2、组合数

从4个人中选2个人参加活动,一共有6种选法。

从n个人中选m个人参加活动,一共有多少种选法?下面的函数实现了这个功能。

请仔细分析代码,填写缺少的部分(下划线部分)。

注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
直接写在题面中不能得分。

1 // n 个元素中任取 m 个元素,有多少种取法
2 int f(int n, int m)
3 {
4     if(m>n) return 0;
5     if(m==0) _______________;
6 
7     return f(n-1,m-1) + _____________;
8 }

参考答案:

技术分享
空1: h(space+1, x-1) (6分)
空2: x-i (3分)

(char)((int)x-i) 当然也是可以的

可能有许多写法,代入到源程序,看运行结果。
View Code

3、金字塔

下面代码的目标是输出一个大写字母组成的金字塔。
其中space表示金字塔底距离左边的空白长度,x表示金字塔底的中心字母。
比如:space=0, x=’C’,则输出:
A
ABA
ABCBA
再如:space=2,x=’E’, 则输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA

请分析该段代码的逻辑,填写缺少的部分。
把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

 1 void h(int space, char x)
 2 {
 3     int i;
 4     if(x<A || x>Z) return;
 5     _______________;
 6     for(i=0; i<space; i++) printf(" ");
 7     for(i=0; i<x-A; i++) printf("%c",A+i);
 8     for(i=0; i<=x-A; i++) printf("%c",______);
 9     printf("\n");
10 }

参考答案:

技术分享
空1: h(space+1, x-1) (6分)
空2: x-i (3分)

(char)((int)x-i) 当然也是可以的
View Code

4、自守数

如果一个自然数的平方数的尾部仍然为该自然数本身,则称其为自守数。
例如:
5 x 5 = 25
76 x 76 = 5776
625 x 625 = 390625

下面代码的目的是寻找出2千万以内的所有自守数。

注意,2千万的平方已经超出了整数表达的最大范围,所以该程序使用了一个巧妙的方案。
如果我们仔细观察乘法的计算过程,就会发现实际上对乘积的尾数有贡献的环节,从而不用真正计算出整个乘积。

请分析代码并填写缺失的部分。

注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
直接写在题面中不能得分。

 1 void zishou()
 2 {
 3     int n;
 4     for(n=1; n<20 * 1000 * 1000; n++)
 5     {
 6         int n2 = n;  
 7         int m = 0;
 8         for(;;)
 9         {
10             if(n2==0) 
11             {
12                 printf("%d\n", n);
13                 break;
14             }
15             
16             int k = n2 % 10;  // 从末尾开始,取出乘数的每位数字
17             m += k * n;  // 累计乘积
18             if(_________________) break;
19             m = m / 10;  // 舍去累计乘积的末位
20             n2 = _______________;  
21         }
22     }
23 }
技术分享
  填空1:
  m % 10 != k 或者:
  k = m % 10
  m%10-k==0

  填空2:
  n2 / 10
View Code

5、中奖计算

某抽奖活动的规则是:每位参与者在纸上写下一个8位数的号码。最后通过摇奖的办法随机产生一个8位数字。参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号。
例如:小张写的数字是:12345678,而开奖号码是:42347856。则称小张中了3个号,因为其中最长的相同连续位是:“234”。如果小张写的是:87654321,则他只中了一个号。
下面的代码根据传入的参数,返回中了几个号。其中:a表示被评价的号码,b表示摇号产生的数字。请填写缺少的代码。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

 1 int g(int a, int b)
 2 {
 3     char sa[]="00000000";
 4     char sb[]="00000000";
 5     int n = 0;
 6     int i,j;
 7 
 8     sprintf(sa,"%8d",a);
 9     sprintf(sb,"%8d",b);
10     for(i=0; i<8; i++)
11     {
12         for(j=1; j<=8-i; j++)
13         {
14             char t = ________;
15             sa[i+j] = 0;
16             if(strstr(sb, sa+i))
17             {
18                 if(j>n) _________;
19             }
20             sa[i+j] = t;
21         }
22     }
23 
24     return n;
25 }
技术分享
  参考答案:
  空1:sa[i+j]    (4分)
  空2:n = j      (5分)

  注意,指针与数组形式的等价性。
  *(sa+i+j) 是一样的
View Code

6、开平方

如果没有计算器,我们如何求2的平方根?
可以先猜测一个数,比如1.5,然后用2除以这个数字。如果我们猜对了,则除法的结果必然与我们猜测的数字相同。我们猜测的越准确,除法的结果与猜测的数字就越接近。
根据这个原理,只要我们每次取猜测数和试除反馈数的中间值作为新的猜测数,肯定更接近答案!这种计算方法叫做“迭代法”。

下面的代码模拟了如何用手工的方法求2的平方根的过程。请填写缺少的代码。

    double n = 2;
    double a = 0;
    double b = n;
    while(fabs(a-b)>1E-15)
    {
        a = (a+b)/2;
        b = __________;
    }
    printf("%f\n", a);
技术分享
n/a
View Code

7、假设a,b,c是3个互不相等的整数。下列代码取出它们中居中的数值,记录在m中。其中的swap()函数可以交换两个变量的值。请完善代码。

    if(a>b) swap(&a, &b);
    if(b>c) swap(&b, &c);
    ______________________;
    int m = b;
技术分享
参考答案: 

if(a>b) swap(&a, &b)
注意:
a>b 也可写为 b<a
swap(&a, &b) 写为:swap(&b, &a) 也是对的。
View Code

8、 给定一个串,例如“aabbbcddddkkkmmmmaakkkk”我们希望去掉连续的重复字母,得出串:“abcdkmak”,下面代码实现了该功能,请完善之。

 1     char* p = "aabbbcddddkkkmmmmaakkkk";
 2     char buf[100];
 3 
 4     char* q = p;
 5     int i=0;
 6     for(;*q;)
 7     {
 8         if(___________|| *q != *(q-1))
 9         {
10             buf[i++] = *q;
11         }
12         q++;
13     }
14     buf[i] = \0;
15 
16     printf("%s\n", buf);
技术分享
参考答案:
q==p
这里我觉的填入i==0也是合理的,保证第一次能执行if语句就行
View Code

 

蓝桥杯之填空题集合1

标签:

原文地址:http://www.cnblogs.com/walkthehorizon/p/4396257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!