NOIP2013全国信息学奥林匹克联赛初赛C++普及组语言测试题(含答案)



 
 
 
 
NOIP2013全国信息学奥林匹克联赛初赛C++普及组语言测试题(含答案)
 
 
作者:shanlu 文章来源:本站原创 点击数:922 更新时间:2013-10-16 9:12:10
 
 
 

NOIP2013全国信息学奥林匹克联赛初赛C++普及组语言测试题(含答案)

一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)

1.一个32位整数型变量占用(A)个字节
A. 4        B. 8       C.  32       D.  128

2.二进制数11.01在十进制下是( A
A.  3.25        B. 4.125        C.  6.25       D.  11.125

3.下面的故事与(B)算法有着异曲同工之妙。

从前有一座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事…………………….‘”
A.
枚举             B.递归              C.贪心                 D.分治

4.逻辑表达式(C)的值与变量A的真假无关
A.      (AvB)^   
A                  B.     (A v B)^   B
C.      (A^B) v (
A^B)           D.    (AvB)^ A  ^B

5.(26,10,17)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数hx=D,将不会产生冲突,其中 a mod b 表示a除以b的余数
A.    x mod 11                 B.x
mod 11
C.   2x mod 11               D.|√x|  mod 11
,其中|√x|表示√x 下取整(为根号)

6.在十六进制表示法中,字母A相当于十进制中的(B
A.   9        B.   10       C.     15        D.      16

7.下图中所使用的数据结构是B

A.    哈希表                   B.                    C.  队列                 D. 二叉树

8.windows 资源管理器中,用鼠标右键单击一个文件时,会出现一个名为复制的操作选项,它的意思是    C
A.  
用剪切板中的文件替换该文件
B.
在该文件所在的文件夹中,将文件克隆一份
C.
将文件复制到剪切板,并保留原文件
D.
将该文件复制到剪切板,并删除原文件

9.已知一颗二叉树有10个节点,则其中至多有(A)个节点有2个子节点。
A.   4            B.    5         C.  6           D.    7

10.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。下图是一个有4个顶点、6条边的连通图。若要使它不再是连通图,至少要删去其中(C)条边

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

11.二叉树的( A)第一个访问的节点是根节点
A.  
先序遍历         B.  中序遍历      C.  后序遍历     D.以上都是

12.Ao作为起点,对于下面的无向图进行深度优先遍历时,遍历顺序不可能是(A)

A.    AoA1A2A3          B.  AoA1A3A2             C.   AoA2A1A3            D. AoA3 A1A2

13. IPv4协议使用32位地址,随着其不断被分配,地址资源日趋枯竭,因此,它正逐渐被使用(D)位地址的IPv6协议所取代
A.   40          B.  48          C.  64         D.  128

14.C)的平均时间复杂度为O(n log n ) ,其中n是待排序的元素个数。
A.  
快速排序        B.   插入排序        C.冒泡排序     D.   基数排序

15.下面是根据欧几里得算法编写的函数,它所计算的是ab的(C

int euclid int  a ,  int b
{
        it (b == 0)
            return a;
        else
            return euclid (b , a % b);
}

A.最大共质因子       B.   最小共质因子
C.   
最大公约数      D.  最小公约数

16.通常在搜索引擎中,对某个关键词加上双引号表示(C
A.   
排除关键词,不显示任何包含该关键词的结果
B.   
将关键词分解,在搜索结果中必须包含其中的一部分
C.   
精确搜索,只显示包含整个关键词的结果
D.  
站内搜索,只显示关键词所指向网站的内容

17.中国的国家顶级域名是(A
A.       .cn               B.            .ch           C.    .chn          D.      .china

18.64位非零浮点数强制转换成32位浮点数厚,不可能D
A.
大于原数           B. 小于原数
C.
等于原数           D.与原数符号相反

19.下列程序中,正确计算12100100个自然数之和 sum(初始值为0)的是(A
A.
i = 1

do{
       sum+= i

       i++

}while
i  =  100

B.
i = 1
do{
       sum += i

       i++

}while
i 100);

C.
i = 1
while
i 100{
        sum +=1

        i++

}

D.
i = 1
while
i = 100{
       sum += i

}

20.CCF NOIP 复赛全国统一评测时使用的系统软件是(B
A.  NOI Windows   B. NOI Linux   C.  NOI Mac OS    D.  NOI DOS

二、问题求解(共两题,每题5分,共计10分;每题全部答对得5分,没有部分分)

1.   7个同学围坐成一圈,要选2个不相邻的作为代表,有__14___种不同的选法


2.   某系统自称使用了一种防窃听的方式验证用户密码。密码是n个数 s1s2 , …,sn,均为01。该系统每次随机生成n个数 a1a2an,均为0或者1,请用户回答(s1a1+s2a2+…+snan)除以2的余数。如果多次回答问题总是正确,即认为掌握密码。该系统认为,即使回答的过程被泄露,也无助于破解密码——因为用户并没有直接发送密码。
   
然而,事与愿违,例如,当n=4时,有人窃听了以下五次问答

就破解出了密码s1=_________0_________      ,s2=______1______      ,s3=_______1_________, s4=____________1_____.

三、阅读程序写出结果(共4题,每题8分,共计32分)
1.  #include <iostream>
     using namespace std;

    int main  ()
{
        int a, b;
       cin>>a>>b
         cout<<a<<”+”<<b<<”=”<<a+b<<end1;
}
输入:3      5
输出:___3+5=8______

2.#include <iostream>
    using namespace   std;

    int main ()
{
     int a,b,u,i,num;

     cin>>a>>b>>u;
      num = 0;
     for (i  =  a; i <=  b ;  i++)
              if((i % u == 0
                    num++

      cout<<num<<end1;
      return 0;
}
输入:1,100,15
输出:____6____

3.  #include <iostream>
     using namespace std;

     int main ()
{
             const     int   SIZE   =   100;

             int  n, f ,  i,  left,right  ,middle ,a[SIZE];

           cin>>n>>f
          for(i = 1; i<= n; i++)
           cin>>a;
     left = 1;
     right  = n;
    do  {
       middle  =  (left + right) /2 ;
        if (f  <= a[middle])
               right  =  middle +1;
       } while (left < right);
      cout<<left<<end1;
       return 0;
}

输入:
12
17
2,4,6,9,11,15,17,18,19,20,21,25
输出:____7______

4.   #include <iostream>
      using name space std;

      int main()
{
      const int SIZE = 100;
      int height [SIZE], num [SIZE], n , ans ;
      cin>>n;
      for(int i = 0 ; i< n ; i++){
          cin>>height;
          num = 1;
          forint J = 0 ;J<i ;j++{
                 if (( height[J]  <  height)  &&  (num[J]  >= num[ i ]))
                         num  =  num[J]+1;
           }
}
ans = 0;
for  (int i = 0 ; i < n ; i++)  {
         if  (num > ans )  ans = num ;
     }
}

输入:
6,
2,5,3,11,12,4
输出:___4_____

四、完善程序(共两题,每题14分,共计28分)

1.          (序列重排)   全局数组变量a定义如下:
   const int SIZE  =100;
   int a [SIZE], n;
它记录着一个长度为n的序列a[1],a[2],…a[n].
      
现在需要一个函数,以整数p1≤p≤n)为参数,实现如下功能:将序列a的前p个数与厚 n-p个数对调,且不改变p个数,(或n-p个数)之间的相对位置。例如,长度为5的序列1,2,3,4,5p=2时重排结果为3,4,5,1,2
      
有一种朴素的算法可以实现这一需求,其时间复杂度为On、空间复杂度为On

void swap1 (int  p)
{
       int i , J , b[SIZE]

       for ( i  =  1;  i  <= p  ;  i++ )
             b[_____填空______]    = a  
       for (i  = p + 1 ; i <= n ; i++)
             b[i  -  p]  = _______
填空_____
       for (i = 1; i<=  ________
填空____; i++)
             a   =   b ;
}

我们也可以用时间换空间,使用时间复杂度为On2)、空间复杂对为O1的算法:

void  swap2(int  p)
{
int i , J temp ;

for (i = p + 1 ; i <= n ; i++) {
     temp  = a [1];
     for(J= i ; j >= ____填空____ j–)
               a[J ]  = a [j - 1 ] ;
         ______
填空________ = temp
    }
}

2..     (二叉查找树)二叉查找树具有如下性质,每个节点的值都大于其左子树所有节点的值、小于其右字数上所有节点的值。试判断一棵树是否为二叉查找树。
            
输入的第一行包含一个整数n,表示这棵树有n个顶点,编号分别为1,2n ,其中编号为1的为根节点。之后的第i行有三个数,value,left_child,right_child   ,分别表示该节点关键字的值。左子节点的编号、右子节点的编号;如果不存在左子节点或者右子节点,则用0代替,输出1表示这棵树是二叉查找树,输出0则表示不是

#include <iostream>
using namespace std;

const int SIZE  = 100;
const int INFINITE = 1000000;

struct node {
    int left_child ,right _child ,value;
};

node a [SIZE];

int is _bst(int root , int lower_bound  ,int upper_bound)
{
       int cur;

       if(root  ==  0)
             return 1;
       cur = a[root]. value;
       if((cur> lower_bound)   &&     (_____填空_____)    &&

             is_bst(a[root]. left_child , lower_bound , cur   ==1)  &&
              (is _bst    (_______
填空_____,____填空_______,_____填空____,)   == 1))

       return 1;
   return   0;
}

int main ()
{
int  i , n ;
cin>>n;
for(i   =  1;  i<=n; i++)
    cin>>a.value>>a.left _child>>a .right_child;
    cout<<is _bst(______填空_______,-INFINITE,INFINITE)<<end1;
    return 0;
}

 

 
文章录入:shanlu    责任编辑:shanlu