2006年全国青少年信息学奥林匹克竞赛NOIP普及组初赛试卷
剩余时间 --:--:--
多选题 共 20 题
1.

在下面各世界顶级的奖项中,为计算机科学与技术领域做出杰出贡献的科学家设立的奖项是(    )。

2.

设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有(  )。

3.

(2010)16 + (32)8的结果是(  )。

4.

A=B=D=trueC=false,以下逻辑运算表达式值为真的有(  )。

5.

5个数的序列排序,不论原先的顺序如何,最少都可以通过(  )次比较,完成从小到大的排序。

6.

与十进制数1770 对应的八进制数是(  )。

7.

高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为 0,如果某个均衡的二 叉树共有 2381 个结点,则该树的树高为(  )。

8.

某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的顺序为123,……,则车辆出站的顺序为(  )。

9.

C++ 中,判断a不等于0b不等于0的正确的条件表达式是(   

10.

C++ 中,表达式21^2的值是(   

11.

在编程时(使用任一种高级语言,不一定是 C++),如果需要从磁盘文件中输入一个很大的二维数组(例如 1000*1000 double 型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上(    )。

12.

在下列各种排序算法中,不是以“比较”作为主要操作的算法是(   )。

13.

在下列关于计算机算法的说法中,不正确的是(   )。

14.

在下列关于计算机语言的说法中,不正确的是(   )。

15.

在计算机中,防火墙的作用是(     )。

16.

CPU(   )的简称。

17.

Linux是一种(     )

18.

以下断电之后仍能保存数据的有(   )。

19.

在下列各软件中,不属于NOIP竞赛(复赛)推荐使用的语言环境有(   )。

20.

已知个结点的二叉树的先根遍历是1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是(   

填空题 共 8 题
1.

(找假币)现有80枚硬币,其中一枚是假币,其重量稍轻,所有真币的重量都相同,如果使用不带砝码的天平称重,最少需要几次,就可以找出假币?你还要指出第1次的称重方法。请写出你的结果:___

2.

(取石子游戏)现有5堆石子,石子数依次为3571950,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取),取最后一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?如果有,甲第一步应该在哪一堆里取多少?请写出你的结果:________


3.

NOIP2006年第十二届普及组初赛阅读程序写结果:

#include <iostream.h> 
void main() 
{int i,u[4],a,b,x,y=10; 
  for(i=0;i<=3;i++) 
    cin >>u[i]; 
  a=(u[0]+u[1]+u[2]+u[3])/7; 
  b=u[0]/((u[1]-u[2])/u[3]); 
  x=(u[0]+a+2)-u[(u[3]+3)%4]; 
  if(x>10) 
    y+= (b*100-u[3])/(u[u[0]%3]*5); 
  else 
    y+=20+(b*100-u[3])/(u[u[0]%3]*5); 
  cout <<x<<","<<y<<endl; 
 } //  注:本例中,给定的输入数据可以避免分母为0或下标越界。

输入:9 3 9 4 

输出:_________

4.

NOIP2006年第十二届普及组初赛阅读程序写结果:

#include "iostream.h" 
#define N  7 
int fun(char s[],char a,int n
 {int j; 
  j=n; 
  while(a<s[j] && j>0) j--; 
  return j; 
 } 
void main() 
 {char s[N+1];
  int k; 
  for(k=1;k<=N;k++) 
    s[k]='A'+2*k+1; 
  cout <<fun(s,'M',N)<<endl; 
 }

输出:_____

5.

NOIP2006年第十二届普及组初赛阅读程序写结果:

#include <iostream.h> 
void main() 
{int i,j,m[]={2,3,5,7,13}; 
long t; 
for (i=0;i<=4;i++) 
  {t=1; 
   for(j=1;j<m[i];j++)   t*=2; 
   cout <<(t*2-1)*t<<"   ";
  } 
cout <<endl; 
}

输出:______

6.

NOIP2006年第十二届普及组初赛阅读程序写结果:

#include <iostream.h> 
#include <iomanip.h> 
void digit(long n,long m) 
  {if(m>0) 
      cout <<setw(2)<<n%10; 
   if(m>1) 
      digit(n/10,m/10); 
   cout <<setw(2)<<n%10; 
  } 
void main() 
 {long x,x2; 
  cout <<"Input a number:"<<endl; 
  cin >>x; 
  x2=1; 
  while(x2<x)  x2*=10; 
  x2/=10; 
  digit(x,x2);
  cout <<endl; 
 }

输入:9734526  

输出:___________

7.

NOIP2006年第十二届普及组初赛完善程序:(全排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数的全部可能的排列(不一定按升序输出)。例如,输入3,则应该输出(每行输出5个排列):

123 132 213  231 321  

312 

程序:

#include <iostream.h> 
#include <iomanip.h>
int n ,a[10];  // a[1],a[2],…,a[n]构成n个数的一个排列 
long count=0;  // 变量count记录不同排列的个数,这里用于控制换行
void perm(int k) 
{int j,p,t; 
if(   ①   ) 
  {count++; 
   for(p=1;p<=n;p++)   
 cout <<setw(1)<<a[p];    
 cout <<"  "; 
   if(   ②   )  cout <<endl; 
    return; 
   } 
 for(j=k;j<=n;j++) 
   {t=a[k];a[k]=a[j];a[j]=t; 
          ③    ; 
      t=a[k];   ④    ; 
   } 
 }  
void main() 
{int i; 
  cout <<"Entry n:"<<endl; 
  cin >>n; 
  for(i=1;i<=n;i++)  a[i]=i; 
     ⑤    ; 
}

8.

NOIP2006年第十二届普及组初赛完善程序:由键盘输入一个奇数 P (P<100,000,000),其个位数字不是 5,求一个整数 S,使 P×S =1111...1 ( 在给定的条件下,解 S 必存在)。要求在屏幕上依次输出以下结果: 

(1)S 的全部数字。除最后一行外,每行输出 50 位数字。 (2) 乘积的数字位数。

 例1:输入p=13,由于13*8547=111111,则应输出(1)8547,(2)6 

例2输入p=147,则输出结果应为

(1)755857898715041572184429327286470143613 

(2)42,即等式的右端有42个1。

 

程序:

#include <iostream.h> 
#include <iomanip.h> 
void main() 
 {long p,a,b,c,t,n; 
  while (1) 
    { cout <<"输入 p, 最后一位为 1 或 3 或 7 或 9:"<<endl; 
      cin >>p; 
      if ((p%2!=0)&&(p%5!=0))  // 如果输入的数符合要求,结束循环
              ⑥   ; 
     } 
   a=0; n=0; 
   while (a<p)   
{a=a*10+1;
n++;         // 变量a存放部分右端项,n为右端项的位数 
    } 
   t=0; 
   do 
    {b=a/p;   
     cout <<setw(1)<<b; 
     t++; 
     if (   ⑦   ) 
        cout <<endl; 
       c=   ⑧   ;  a=   ⑨   ; n++; 
     } while (c>0); 
   cout<<endl<<"n="<<   ⑩   <<endl; 
 }

C++ 编辑器
输入
输出