视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
NOIP2020初赛普及组C题目及答案
2025-09-29 17:04:28 责编:小OO
文档
第十四届全国青青年信息学奥林匹克联赛初赛试题2020

                   ( 普及组  C++语言  二小时完成 ) 

●●  全数试题答案均要求写在答卷纸上,写在试卷纸上一概无效  ●● 

一、 单项选择题 (共20题,每题分,共计30分。每题有且仅有一个正确答案.)。

1.微型运算机中,操纵器的大体功能是(   )。

A. 操纵机械各个部件和谐工作      B. 实现算术运算和逻辑运算        

C. 获取外部信息                  D. 存放程序和数据

2. 设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的是(  )。

A. (A∧B)∨(C∧D∨A)          B. ((A∧B)∨C)∧D 

C. (B∨C∨D)∧D∧A               D. A∧(D∨C)∧B 

3. 在以下关于图灵奖的说法中,不正确的选项是(   )。

A. 图灵奖是美国运算机协会于1966年设立的,专门奖励那些对运算机事业作出重要奉献的个人

B. 图灵奖有“运算机界诺贝尔奖”之称

C. 迄今为止,尚未华裔运算机科学家获此殊荣

D. 图灵奖的名称取自运算机科学的前驱、英国科学家阿兰·图灵

4.运算机在工作进程中,假设突然停电,(    )中的信息可不能丢失。

A. ROM和RAM      B. CPU             D. RAM

5.完全二叉树共有2*N-1个结点,那么它的叶节点数是(   )。

A. N-1         B. N           C. 2*N        D. 2N-1

6. 在以下各项中,(  )不是操作系统软件。

A. Solaris      B. Linux            C. Windows Vista         D. Sybase 

7.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,f,e,c,a,那么栈S的容量至少应该是(   )。

A. 6           B. 5           C. 4            D. 3

8. 与十进制数相等的四进制数是(  )。

A.        B. 131.22        C.        D. 

9. 设字符串S=”Olympic”,S的非空子串的数量是(  )。

A. 28     B. 29       C. 16            D. 17

10.是最近几年来互联网的热点概念之一,其核心思想是互动与分享。以下网站中,(   )是典型的应用。

 A. Sina         B. Flickr          C. Yahoo            D. Google

11. 递归进程或函数调历时,处置参数和返回地址,通常利用一种称为(    )的数据结构。

A. 队列          B. 数组         C. 线性表             D. 栈

12.  (2020)10 + (5B)16的结果是(   )。

A. (833)16       B. (20)10         C. (4163)8          D. ()2

13. 二叉树T,已知其先根遍历是1 2 4 3 5 7 6(数字为结点的编号,以下同),中根遍历是2 4 1 5 7 3 6,那么该二叉树的后根遍历是(   )。

A. 4 2 5 7 6 3 1           B. 4 2 7 5 6 3 1  

C. 7 4 2 5 6 3 1           D. 4 2 7 6 5 3 1

14.将数组{8, 23, 4, 16, 77, -5, 53, 100}中的元素按从大到小的顺序排列,每次能够互换任意两个元素,最少需要互换(   )次。

A. 4            B. 5           C. 6            D. 7

15. 对有序数组{5, 13, 19, 21, 37, 56, , 75, 88,92,100}进行二分查找,成功查找元素19的查找长度(比较次数)是(   )。

A. 1            B. 2           C. 3             D. 4

16. 面向对象程序设计(Object-Oriented Programming)是一种程序设计的方式论,它将对象作为程序的大体单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。下面关于面向对象程序设计的说法中,不正确的选项是(   )。

A. 面向对象程序设计通常采纳自顶向下设计方式进行设计。

B. 面向对象程序设计方式具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。

C. 支持面向对象特性的语言称为面向对象的编程语言,目前较为流行的有C++、JAVA、C#等。

D. 面向对象的程序设计的雏形来自于Simula语言,后来在SmallTalk语言的完善和标准化的进程中取得更多的扩展和对以前思想的从头注解。至今,SmallTalk语言仍然被视为面向对象语言的基础。

17. 在32*32点阵的“字库”中,汉字“北”与“京”的字模占用字节数之和是(   )。

  A. 512          B.  256         C.  384          D. 128

18. 设T是一棵有n个极点的树,以下说法不正确的选项是(    )。

A. T有n条边                     B. T是连通的

C. T是无环的                     D. T有n-1条边

19. 以下不属于NOIP竞赛推荐利用的语言环境的是(   )。

A. Dev-C++          B. Visual C++           C. free pascal          D.    Lazarus

20.在C++程序中,表达式200|10的值是(   )

 A. 20         B. 1            C. 220         D. 202 

二.问题求解(共2题,每题5分,共计10分)

1. 书架上有4本不同的书A、B、C、D。其中A和B是红皮的,C和D是黑皮的。把这4本书摆在书架上,知足所有黑皮的书都排在一路的摆法有_____种。知足 A必需比C靠左,所有红皮的书要摆放在一路,所有黑皮的书要摆放在一路,共有______种摆法。

2.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,那么城市1到城市6的最短距离为_____________。

城市1城市2城市3城市4城市5城市6
城市102311215
城市22025312
城市3320365
城市4153079
城市51236702
城市615125920
三.阅读程序写结果(共4题,每题8分,共计32分)

1. #include

using namespace std;

int main()

{

    int i, a, b, c, d, f[4];

for(i = 0; i < 4; i++) cin >> f[i];

    a = f[0] + f[1] + f[2] + f[3];

    a = a / f[0];

    b = f[0] + f[2] + f[3];

    b = b / a;

    c = (b * f[1] + a) / f[2];

    d = f[(b / c ) % 4];

if(f[(a + b + c + d) % 4] > f[2])

        cout << a + b<< endl;

    else 

        cout << c + d << endl;

    return 0;

}

输入:9 19 29 39    

输出:_______________

2.#include

using namespace std;

void foo(int a, int b, int c)

{

    if(a > b) 

        foo(c, a, b);

    else

        cout<}

int main()

{

    int a, b, c;

    cin >> a >> b >> c;

    foo(a, b, c);

    return 0;

}

输入: 3 1 2

输出: __________

3.#include 

using namespace std;

void func(int ary[], int n )

{

    int i=0, j, x;

    j=n-1;

while(i    {

        while (i0) i++;

        while (i        if (i            x=ary[i];

            ary[i++]=ary[j];

            ary[j--]=x;

        }

    }

}

int main()

{

    int a[20], i, m;

    m=10;

for(i=0; i    {

        cin>>a[i];

    }

    func(a, m);

for (i=0; i        cout< cout<< endl;

    return 0;

}

输入:5 4 -6 -11 6 -59 22 -6 1 10

输出:____________________________________

4. #include

#include

using namespace std;

#define MAX 100

void solve(char first[], int spos_f, int epos_f, char mid[], int spos_m, int epos_m)

{

    int i, root_m;

if(spos_f > epos_f)

        return;

for(i = spos_m; i <= epos_m; i++)

        if(first[spos_f] == mid[i])

        {

            root_m = i;

            break;

        }

    solve(first, spos_f + 1, spos_f + (root_m - spos_m), mid, spos_m, root_m - 1);

    solve(first, spos_f + (root_m - spos_m) + 1, epos_f, mid, root_m + 1, epos_m);

cout << first[spos_f];

}

int main()

{

    char first[MAX], mid[MAX];

    int len;

cin >> len;

cin >> first >> mid;

    solve(first, 0, len - 1, mid , 0, len - 1);    

cout << endl;

    return 0;

}

输入:    7

ABDCEGF

BDAGECF

输出:____________________________________

四.完善程序 (前4空,每空分,后6空,每空3分,共28分)

1.(字符串替换)给定一个字符串S(S仅包括大小写字母),下面的程序将S中的每一个字母用规定的字母替换,并输出S通过替换后的结果。程序的输入是两个字符串,第一个字符串是给定的字符串S,第二个字符串S’由26个字母组成,它是a-z的任一排列,大小写不定,S’规定了每一个字母对应的替换字母:S’中的第一个字母是字母A和a的替换字母,即S中的A用该字母的大写替换,S中的a用该字母的小写替换;S’中的第二个字母是字母B和b的替换字母,即S中的B用该字母的大写替换,S中的b用该字母的小写替换;…… 以此类推。

#include

#include <>

char change[26], str[5000];

using namespace std;

void CheckChangeRule()

{

    int i;

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

    {

        if (                       ①                        )

               change[i] -= 'A' - 'a';

    }

}

void ChangeString()

{

    int i;

    for (i = 0;i     {

          if (                   ②                      )

                str[i] = change[str[i] - 'A'] -'a' + 'A';

          else

                                ③                       

    }

}

int main()

{

        int i;

cin >> str ;

cin >> change;

    CheckChangeRule();

                   ④                

cout << str << endl;

    return 0;

}

2.(找第k大的数) 给定一个长度为1,000,000的无序正整数序列, 和另一个数n (1<=n<=1000000), 然后以类似快速排序的方式找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3大的数是4)。

#include

using namespace std;

int a[1000001],n,ans = -1;

void swap(int &a,int &b)

{

    int c;

    c = a; a = b;    b = c;

}

int FindKth(int left, int right, int n)

{

    int tmp,value,i,j;

    if (left == right) return left;

    tmp = rand()% (right - left) + left;

    swap(a[tmp],a[left]);

    value =          ①         

    i = left;

    j = right;

while (i < j)

    {

        while (i < j &&            ②        ) j --;

        if (i < j) {a[i] = a[j]; i ++;} else break;

        while (i < j &&            ③        ) i ++;

        if (i < j) {a[j] = a[i]; j - -;} else break;

    }

            ④         

    if (i < n) return  FindKth(               ⑤            );

    if (i > n) return                   ⑥                    

    return i;

}

int main()

{

    int i;

    int m = 1000000;

for (i = 1;i <= m;i ++)

        cin >> a[i];

cin >> n;

    ans = FindKth(1,m,n);

cout << a[ans];

    return 0;

}

一.选择题

ABCCB  DCDAB  DABBB  ABABD

二.问题解答

1.12   4

2.7

三.阅读程序

1.23

2.2.,3,1

3.5 4 10 1 6 22 -59 -6 -11 -6

4.  DBGEFCA 

四.完善程序

1.

(1)change[i] >= 'A' && change[i] <= 'Z'(只写change[i] <= 'Z'也对) 

(2)str[i] >= 'A' && str[i] <= 'Z'(只写str[i] <= 'Z'也对)

(3)str[i] = change[str[i] - 'a'];

(4)ChangeString();

2.

(1)a[left];

(2)a[j] < value

(3)a[i] > value

(4)a[i] = value;

(5)i + 1,right,n

(6)FindKth(left, i – 1, n);下载本文

显示全文
专题