回 帖 发 新 帖 刷新版面

主题:2004年第十届信息学奥林匹克联赛初赛试题(提高组)

2004年第十届信息学奥林匹克联赛初赛试题(提高组)

第十届全国青少年信息学奥林匹克联赛初赛试题
(提高组c语言 二小时完成)

一、单项选择题(共10题,每题1.5分,共计15分)
1.设全集{a,b,c,d,e,f,g},集合A={a,b,c},B={b,d,e},C={e,f,g},那么集合(A-B)∪(~C∩B)为()。
A.{a,b,c,d}   B.{a,b,d,e}   
C.{b,d,e}  D.{b,c,d,e} E.{d,f,g}

2.由3个a,5个b和2个c构成的所有字符串中,包含子串"abc"的共有( )个。
A.40320   B.39600   C.840   
D.780   E.60

3.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出口。一直某时刻该车站状态为空,从这一时刻开始的出入记录为:"进,出,进,进,出,进,进,进,出,出,进,出",假设车辆入站的顺序为1,2,3......,则车辆出站的顺序为()。
A.1,2,3,4,5   B.1,2,4,5,7,   
C.1,3,5,4,6  D.1,3,5,6,7
E.1,3,6,5,7

4.满二叉树的叶节点个数为N,则它的节点总数为( )。
A.N   B.2*N   C.2*N-1   D.2*N+1   E.2N-1

5.二叉树T已知其前序遍历序列为1243576,中序遍历序列为4215736,则其后序遍历为( )。
A.4257631   B.4275631  C.4275361   D.4723561   E.4526371

6.十进制数100.625等值于二进制数( )。
A.1001100.101   B.1100100.101   C.1100100.011   D.1001100.11   
E.1001100.01

7.下面哪个部件对于个人桌面电脑的正常运行不是必须的( )。
A.CPU   B.图形卡(显卡)   
C.光驱   D.主板   E.内存

8.下列哪个网络上常用的名字缩写是错的( )。
A.WWW (World Wide Web)   
B.URL (Uniform Resource Locator)   
C.HTTP (Hypertext Transter Protocol)   
D.FTP (Fast Transger Protocol)   
E.TCP (Transger Control Protocol)

9.用静电吸附墨粉后转移到纸张上,是哪种输出设备的工作方式( )。
A.针式打印机   B.喷墨打印机   
C.激光打印机   D.笔式绘图仪   
E.喷墨绘图仪

10.一台计算机如果要利用电话线上网,就必须配置能够对数字信号和模拟信号进行相互转换的设备,这种设备是( )。
A.调制解调器   B.路由器   
C.网卡   D.网关   E.网桥

二、不定项选择题(共10题,每题1.5分,共计15分)
11.美籍匈牙利数学家冯•诺依曼对计算机科学发展所做出的贡献包括()。
A.提出理想计算机的数学模型,成为 计算机科学的理论基础。   
B.提出存储程序工作原理,对现代电子计算机的发展产生深远影响。
C.设计出第一台具有存储程序功能 的计算机EDVAC。
D.采用集成电路作为计算机的主要功能部件。
E.指出计算机性能将以每两年翻一番的速度想前发展。

12.下列哪个(些)是64位处理器( )。
A.Intel Itanium
B.Inter PentiumIII
C.AMD Athlon64   
D.AMD Opteron   
E.IBM Power5

13.(2004)10+(32)16的结果是( )。
A.(2036) 10    B.(2054)10   
C.(4006)8      D.100000000110)2   
E.(2036)10

14.下列哪个(些)不是数据库软件的名称( )。
A.MySQL    B.SQL Server   
C.Oracle   D.Outlook   E.Foxpro

15.下列哪个(些)不是计算机的存储设备( )。
A.文件管理器   B.内存   C.显卡   
D.硬盘   E.U盘

16.下列哪个(些)软件属于操作系统( )。
A.Microsoft Word     B.WindowsXP   
C.Foxmail            D.金山影霸   
E.Red Hat Linux

17.下列说法中正确的是( )。
A.CPU的基本功能就是执行指令   
B.CPU的主频是指CPU在1秒内完成的指令周期数,主频越快的CPU速度一定越快。   
C.内部构造不同的CPU运行相同的机器语言程序,一定会产生不同的结果。
D.在一台计算机内部,一个内存地址编码对应唯一的一个内存单元。
E.数据总线的宽度决定了一次传递数据量的大小,是影响计算机性能的因素之一。

18.彩色显示器所显示的五彩斑斓的色彩,是由哪三色混合而成的( )。
A.红   B.白   C.蓝   D.绿   E.橙

19.下列哪个(些)程序设计语言支持面向对象程序设计方法( )。
A.C++     B.Object Pascal   
C.C       D.Smalltalk      E.Java

20.某大学计算机专业的必修课及其先修课如下表示:
课程代号

C0
C1
C2

课程名称
高等数学
程序设计语言
离散数学

先修课程
  
  
C0、C1


课程代号

C3
C4
C5

课程名称
数据结构
编译技术
操作系统

先修课程
C1、C2
C3
C3、C7


课程代号

C6
C7

课程名称
普通物理
计算机原理

先修课程
C0
C6



A.C0,C1,C2,C3,C4, C6,C7,C5   
B.C0,C1,C2,C3,C4,C5, C6,C7   
C.C0,C1, C6,C7,C2,C3,C4,C5  
D.C0,C1, C6,C7,C5,C2,C3,C4   
E .C0,C1,C2,C3, C6,C7,C5,C4

B.C0,C1,C2,C3,C4,C5, C6,C7   
C.C0,C1, C6,C7,C2,C3,C4,C5  
D.C0,C1, C6,C7,C5,C2,C3,C4   
E .C0,C1,C2,C3, C6,C7,C5,C4

三、问题求解(共2题,每题5分,共计10分)
1.75名儿童到游乐场去玩。他们可以骑旋转木马,坐滑行铁道,乘宇宙飞船,已知其中20人这三种东西都玩过,55人至少玩过其中的两种。若每样乘坐一次的费用是5元,游乐场总共收入700元,可知有_______名儿童没玩过其中任何一种。

2.已知a,b,c,d,e,f,g七个人中,a会讲英语;b会讲英语和汉语;c会讲英语、意大利语和俄语;d会讲汉语和日语;e会讲意大利语和德语;f会讲俄语、日语和法语;g会讲法语和德语。能否将他们的座位安排在圆桌旁,使得每个人都能与他身边的人交谈?如果可以,请以"ab"开头写出你的安排方案:______________。


四、 阅读程序(共4题,每题8分,共计32分)
1.#include <stdio.h>
int main( )
{ int u[4],a,b,c,d,x,y,z;
scanf("%d%d%d%d",&(u[0]),&(u[1]),&(u[2]),&(u[3]));
  a=u[0]+u[1]+u[2]+u[3]-5;
  b=u[0]*(u[1]-u[2]/u[3]+8);
  c=u[0]*u[1]/u[2]*u[3];
  x=(a+b+2)*3-u[(c+3)%4];
  y=(c*100-13)/a/(u[b%3]*5);
  if((x+y)%2==0) z=(a+b+c+x+y)/2;
  z=(a+b+c-x-y)*2;
  printf("%d\n",x+y-z);
  return 0;
}
输入:2  5  7  4
输出:____________.

2.#include <stdio.h>
int number,ndata,data[100],sum;
void solve(int s,int sign,int n)
{ int i;
  for(i=s;i<ndata;i++)
  {  sum+=sign*(number/n/data[i]);
      solve(i+1,-sign,n*data[i]);
  }
}
int main( )
{ int i;
  scanf("%d%d",&number,&ndata);
  sum=0;
  for(i=0;i<ndata;i++) scanf("%d",&(data[i]));
  solve(0,1,1);
  printf("%d\n",sum);
  return 0;
}
输入:1000  3  5  13  11
输出:___________。

3.#include <stdio.h>
char c[3][200];
int s[10],m,n;
void numara( )
{ int i,j,cod,nr;
  for(j=0;j<n;j++)
  { nr=0; cod=1;
    for(i=0;i<m;i++)
    { if(c[i][j]=='1')
      { if(!cod)
        { cod=1;s[nr]++;nr=0; }
      }
      else
      { if(cod) { nr=1;cod=0; }
        else nr++;
      }
    }
    if(!cod)  s[nr]++;
  }
}  
int main( )
{ int i,j;
  scanf("%d%d\n",&m,&n);
  for(i=0;i<m;i++) gets(c[i]);
  numara( );
  for(i=1;i<=m;i++)
  if(s[i]!=0) printf("%d %d ",i,s[i]);
  return 0;
}
输入:3  10
1110000111
1100001111
1000000011
输出:__________________________.

4.#include <stdio.h>
const int u[3]={1,-3,2};
const int v[2]={-2,3};
int g(int n)
{ int i,sum=0;
  for(i=1;i<=n;i++)
     sum+=u[i%3]*i;
  return sum;
}
int main( )
{ int n,i,sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
     sum+=v[i%2]*g(i);
  printf("%d\n",sum);
  return 0;
}
输入:103
输出:__________.

五.完善程序(前5空,每空2分;后6空,每空3分,共28分)
1.Joseph
题目描述:
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,......,n。从编号是1 的人开始报数,数到m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,......,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
现在的问题是:假设有k个好人和k个坏人。好人的编号是1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。
输入:仅有的一个数字是k (0<K<14)。
输出:使得最先出列的k个人都是坏人  
的m的最小值。
输入样例:
4
输出样例:
30
程序:
#include <stdio.h>
long k,m,begin;
int check(long remain)
{ long result=( ___①___ )%remain;
  if( ____②____ )
  { begin=result;
    return 1;
  }
  else  return 0;
}
int main( )
{ long i,find=0;
  scanf("%ld",&k);
  for(m=k; ____③____ ;m++)
  { find=1;
    begin=0;
    for(i=0;i<k;i++)
       if(!check( ____④____ ))
       { find=0;
         break;
       }
  }
  printf("%ld\n",____⑤____ );
}

2. 逻辑游戏
题目描述:
    一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这个区域的外面。这条曲线是容许自交的。
    对于图1,我同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。

   

三、问题求解(共2题,每题5分,共计10分)
1.75名儿童到游乐场去玩。他们可以骑旋转木马,坐滑行铁道,乘宇宙飞船,已知其中20人这三种东西都玩过,55人至少玩过其中的两种。若每样乘坐一次的费用是5元,游乐场总共收入700元,可知有_______名儿童没玩过其中任何一种。

2.已知a,b,c,d,e,f,g七个人中,a会讲英语;b会讲英语和汉语;c会讲英语、意大利语和俄语;d会讲汉语和日语;e会讲意大利语和德语;f会讲俄语、日语和法语;g会讲法语和德语。能否将他们的座位安排在圆桌旁,使得每个人都能与他身边的人交谈?如果可以,请以"ab"开头写出你的安排方案:______________。


四、 阅读程序(共4题,每题8分,共计32分)
1.#include <stdio.h>
int main( )
{ int u[4],a,b,c,d,x,y,z;
scanf("%d%d%d%d",&(u[0]),&(u[1]),&(u[2]),&(u[3]));
  a=u[0]+u[1]+u[2]+u[3]-5;
  b=u[0]*(u[1]-u[2]/u[3]+8);
  c=u[0]*u[1]/u[2]*u[3];
  x=(a+b+2)*3-u[(c+3)%4];
  y=(c*100-13)/a/(u[b%3]*5);
  if((x+y)%2==0) z=(a+b+c+x+y)/2;
  z=(a+b+c-x-y)*2;
  printf("%d\n",x+y-z);
  return 0;
}
输入:2  5  7  4
输出:____________.

2.#include <stdio.h>
int number,ndata,data[100],sum;
void solve(int s,int sign,int n)
{ int i;
  for(i=s;i<ndata;i++)
  {  sum+=sign*(number/n/data[i]);
      solve(i+1,-sign,n*data[i]);
  }
}
int main( )
{ int i;
  scanf("%d%d",&number,&ndata);
  sum=0;
  for(i=0;i<ndata;i++) scanf("%d",&(data[i]));
  solve(0,1,1);
  printf("%d\n",sum);
  return 0;
}
输入:1000  3  5  13  11
输出:___________。

3.#include <stdio.h>
char c[3][200];
int s[10],m,n;
void numara( )
{ int i,j,cod,nr;
  for(j=0;j<n;j++)
  { nr=0; cod=1;
    for(i=0;i<m;i++)
    { if(c[i][j]=='1')
      { if(!cod)
        { cod=1;s[nr]++;nr=0; }
      }
      else
      { if(cod) { nr=1;cod=0; }
        else nr++;
      }
    }
    if(!cod)  s[nr]++;
  }
}  
int main( )
{ int i,j;
  scanf("%d%d\n",&m,&n);
  for(i=0;i<m;i++) gets(c[i]);
  numara( );
  for(i=1;i<=m;i++)
  if(s[i]!=0) printf("%d %d ",i,s[i]);
  return 0;
}
输入:3  10
1110000111
1100001111
1000000011
输出:__________________________.

4.#include <stdio.h>
const int u[3]={1,-3,2};
const int v[2]={-2,3};
int g(int n)
{ int i,sum=0;
  for(i=1;i<=n;i++)
     sum+=u[i%3]*i;
  return sum;
}
int main( )
{ int n,i,sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
     sum+=v[i%2]*g(i);
  printf("%d\n",sum);
  return 0;
}
输入:103
输出:__________.

五.完善程序(前5空,每空2分;后6空,每空3分,共28分)
1.Joseph
题目描述:
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,......,n。从编号是1 的人开始报数,数到m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,......,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
现在的问题是:假设有k个好人和k个坏人。好人的编号是1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。
输入:仅有的一个数字是k (0<K<14)。
输出:使得最先出列的k个人都是坏人  
的m的最小值。
输入样例:
4
输出样例:
30
程序:
#include <stdio.h>
long k,m,begin;
int check(long remain)
{ long result=( ___①___ )%remain;
  if( ____②____ )
  { begin=result;
    return 1;
  }
  else  return 0;
}
int main( )
{ long i,find=0;
  scanf("%ld",&k);
  for(m=k; ____③____ ;m++)
  { find=1;
    begin=0;
    for(i=0;i<k;i++)
       if(!check( ____④____ ))
       { find=0;
         break;
       }
  }
  printf("%ld\n",____⑤____ );
}

2. 逻辑游戏
题目描述:
    一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这个区域的外面。这条曲线是容许自交的。
    对于图1,我同学告诉我画出这样的一条曲线(图2)是不可能的,但是对于有的图形(比如图3),画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画出满足要求的曲线。

   
  


输入:
输入的图形用一个n*n的矩阵表示。矩阵的每一个单元里有一个0到255这间的整数(包括0和255)。处于同一个区域的单元里的数相同,相邻的区域的数不同(但是不相邻的区域里的可能相同)。
输入的第一行是n(0<n<100)。以下的n行每行包含n个整数,分别给出对应的单元里的整数(这n个整数之间用空格分开)。图4给出了输入样例对应的图形。
输出:
当可以画出满足题意的曲线的时候,输出"YES";否则输出"NO"。
输入样例:
3
1  1  2
1  2  2
1  1  2
输出样例:
YES
程序:
#include <stdio.h>
#include <math.h>
int orig,n,ns,a[102][102],bum;
int d[ ]={1,0,-1,0,0,1,____①____};
void plimba(int x,int y)
{ int i,x1,y1;
a[x][y]=-a[x][y];
if(abs(a[x-1][y])!=orig&&( __②___!=a[x-1][y]||abs(a[x][y-1])!=orig))  
    ns++;
if(abs(a[x+1][y])!=orig&&( a[x+1][y-1]!=a[x+1][y]||abs(a[x][y-1])!=orig))  
   ns++;
if(abs(a[x][y-1])!=orig&&( __③___!=a[x][y-1]||abs(a[x-1][y])!=orig))  
   ns++;
if(abs(a[x][y+1])!=orig&&( a[x-1][y+1]!=a[x][y+1]||abs(a[x-1][y])!=orig))  
   ns++;
for(i=0;i<4;i++)
{ x1=x+d[2*i];
    y1=y+___④___;
    if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&__⑤___ )
       plimba(x1,y1);
}
}
int main( )
{ int i,j;
  bun=1;
  scanf("%d",&n);
  for(i=0;i<=n+1;i++)
     for(j=0;j<=n+1;j++)
        a[i][j]=0;
  a[0][0]=-1;
  a[n+1][0]=-1;
  a[0][n+1]=-1;
  a[n+1][n+1]=-1;
  for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
        scanf("%d",&(a[i][j]));
  for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
    { if(a[i][j]>-1)
      { ns=0;
         ___⑥___;
         plimba(i,j);
         if(ns%2==1) bun=0;
      }
    }
  if(bun) printf("YES\n");
  else printf("NO\n");
  return 0;
}

回复列表 (共15个回复)

沙发

[em10][em10][em10]我才得了40分.55555555这份难多了,我用了120分钟才做到阅读程序的第三题~~前面又犯了个小错误。

怎么搞得吗?~先前是江苏出的题,现在干吗要改为北京出题斡~

板凳

晕,怎么有几个题目和普及组一样的啊,我竟复赛了,呵呵

3 楼

有没答案的啊?

4 楼

5 楼

我也进复赛了!耶!

6 楼

7 楼

8 楼

这份题难度不大,不过时间到是有点紧

9 楼

我是初学者,看本试题后感觉还可以,c语言编程方面没问题。只是有些小的选择题挺烦人的。
[em10]
[fly]成为程序员  学好C语言[/fly]

10 楼

我考得不好呀,我是pascal组的,有没有答案

我来回复

您尚未登录,请登录后再回复。点此登录或注册