蓝桥杯之填空题集合1

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++
虽然可以得到正确结果,但不符题意(高效运行),不给分。

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) 当然也是可以的

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

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) 当然也是可以的

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

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) 是一样的

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

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) 也是对的。

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语句就行

时间: 2024-08-17 23:54:15

蓝桥杯之填空题集合1的相关文章

蓝桥杯大纲填空题通用样题“有趣的平方数”

a1.java public class a1 { public static void main(String[] args) { // TODO Auto-generated method stub int i2=0; for(int i = 100; i < 1000; i++) { i2 = i*i; if(i2%1000==i) { System.out.print(i); return; } } } } 原文地址:https://www.cnblogs.com/jzl123/p/83

蓝桥杯——历年真题之带分数

问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0). 类似这样的带分数,100 有 11 种表示法. 输入格式 从标准输入读入一个正整数N (N<1000*1000) 输出格式 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数. 注意:不要求输出每个表示,只统计有多少表示法! 样例输入1 100 样例输出1 11 样例输入

蓝桥杯之填空集合2

1.因式分解 因数分解是十分基本的数学运算,应用广泛.下面的程序对整数n(n>1)进行因数分解.比如,n=60, 则输出:2 2 3 5.请补充缺失的部分. void f(int n) { for(int i=2; i<n/2; i++) { ____________________ { printf("%d ", i); n = n / i; } } if(n>1) printf("%d\n", n); } 参考答案: while( n % i

今天做了几道蓝桥杯的去年题

找了几道简单的热热身,感觉自己算法还是记不住,能描述,不会写,应该是练少了的缘故. 今天一道题交了好几遍才对啊,明明是很简单的题啊啊啊啊啊,算了,先回忆一下心路历程. 题目是这样的 问题描述 栋栋正在和同学们玩一个数字游戏. 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要说下一个数字2.再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4.下一个同学要往下数三个数,说7.依次类推. 为了使数字不至于太大,栋栋和同学们约定,

15年蓝桥杯第5题

题意: 1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 思路:和15年第3题几乎是一样的dfs.依然不是自己想出来的.太佩服这个机智的深搜了. 如果题意是把用完九个数的话. 附right代码: 1 /* 2 1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 3 */ 4 5 #include <stdio.h> 6 7 bool check(int x[]) { 8 for (int i=0; i<9; ++i) { 9 for (int

15年蓝桥杯第4题

题意: StringInGrid函数会在一个指定大小的格子中打印指定的字符串.要求字符串在水平.垂直两个方向上都居中.如果字符串太长,就截断.如果不能恰好居中,可以稍稍偏左或者偏上一点.下面的程序实现这个逻辑,请填写划线部分缺少的代码.思路:被各种输出空搞晕了,不过看的题解上的原题,一拿该是有些出入的.开始以为的输出应该是 int len1 = (width - 2 - strlen(s)) / 2; int len2 = (width - 1 - len1 - strlen(s)); prin

第七届蓝桥杯——第五题||抽签

抽签 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 .... #include <

第四届蓝桥杯第七题 错误票据

题解:写了简单题,好开心,我果然不适合学算法.......写写简单题,当个咸鱼就好了嘛!! #include <iostream> #include <algorithm> #include <cstdlib> #include <cstdio> #include <cstring> #include <sstream> using namespace std; const int maxn = 100000 + 50; int N;

第四届蓝桥杯第八题 翻硬币

题解:简单贪心, 比赛之前写写水题 #include <iostream> #include <cstring> #include <string> using namespace std; const int maxn = 1000 + 20; void solve() { int init[maxn], over[maxn]; string in, ov; int ans = 0; cin >> in; cin >> ov; for (uns