1002 - NOIP 2007 提高组初赛试题

下面我来讲述1002 - NOIP 2007 提高组初赛试题

试题题目

第 1 题

在以下各项中,( )不是 CPU 的组成部分。

  1.  A. 

    控制器

     B. 

    运算器

     C. 

    寄存器

     D. 

    主板

     E. 

    算术逻辑单元(ALU)


本题共 1.5 分

第 2 题

在关系数据库中,存放在数据库中的数据的逻辑结构以( )为主。

  1.  A. 

    二叉树

     B. 

    多叉树

     C. 

    哈希表

     D. 

    B+ 树

     E. 

    二维表


本题共 1.5 分

第 3 题

在下列各项中,只有( )不是计算机存储容量的常用单位。

  1.  A. 

    Byte

     B. 

    KB

     C. 

    MB

     D. 

    UB

     E. 

    TB


本题共 1.5 分

第 4 题

ASCII 码的含义是( )。

  1.  A. 

    二—十进制转换码

     B. 

    美国信息交换标准代码

     C. 

    数字的二进制编码

     D. 

    计算机可处理字符的唯一编码

     E. 

    常用字符的二进制编码


本题共 1.5 分

第 5 题

在 C++ 语言中,表达式 23|2^5 的值是( )

  1.  A. 

    23

     B. 

    1

     C. 

    18

     D. 

    32

     E. 

    24


本题共 1.5 分

第 6 题

在 C 语言中,判断 �a 等于 00 或 �b 等于 00 或 �c 等于 00 的正确的条件表达式是( )

  1.  A. 

    !((a!=0)||(b!=0)||(c!=0))

     B. 

    !((a!=0)&&(b!=0)&&(c!=0))

     C. 

    !(a==0&&b==0)||(c!=0)

     D. 

    (a=0)&&(b=0)&&(c=0)

     E. 

    !((a=0)||(b=0)||(c=0))


本题共 1.5 分

第 7 题

地面上有标号为 �,�,�A,B,C 的 33 根细柱,在 �A 柱上放有 1010 个直径相同中间有孔的圆盘,从上到下依次编号为 1,2,3,…1,2,3,…,将 �A 柱上的部分盘子经过 �B 柱移入 �C 柱,也可以在 �B 柱上暂存。如果 �B 柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么,在 �C 柱上,从下 到上的盘子的编号为( )。

  1.  A. 

    2 4 3 6 5 7

     B. 

    2 4 1 2 5 7

     C. 

    2 4 3 1 7 6

     D. 

    2 4 3 6 7 5

     E. 

    2 1 4 3 7 5


本题共 1.5 分

第 8 题

与十进制数 17.562517.5625 对应的 88 进制数是( )。

  1.  A. 

    21.562521.5625

     B. 

    21.4421.44

     C. 

    21.7321.73

     D. 

    21.73121.731

     E. 

    前 44 个答案都不对


本题共 1.5 分

第 9 题

欧拉图 �G 是指可以构成一个闭回路的图,且图 �G 的每一条边恰好在这个闭回路上出现一次(即一笔画成)。在以下各个描述中,不一定是欧拉图的是( )。

  1.  A. 

    图 �G 中没有度为奇数的顶点

     B. 

    包含欧拉环游的图(欧拉环游是指通过图中每边恰好一次的闭路径)

     C. 

    包含欧拉闭迹的图(欧拉迹是指通过图中每边恰好一次的路径)

     D. 

    存在一条回路,通过每个顶点恰好一次

     E. 

    本身为闭迹的图


本题共 1.5 分

第 10 题

一个无法靠自身的控制终止的循环称为“死循环”,例如,在 C++ 语言程序中,语句 while(1) printf("*"); 就是一个死循环,运行时它将无休止地打印 * 号。下面关于死循环的说法中,只有( ) 是正确的。

  1.  A. 

    不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而, 任何编译系统都不做死循环检验

     B. 

    有些编译系统可以检测出死循环

     C. 

    死循环属于语法错误,既然编译系统能检查各种语法错误,当然也应该能检查出死循环

     D. 

    死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也是可以检测的

     E. 

    对于死循环,只能等到发生时做现场处理,没有什么更积极的手段


本题共 1.5 分

第 11 题

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

  1.  A. 

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

     B. 

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

     C. 

    A∧(B∨C∨D)∨D

     D. 

    (A∧(D∨C)) ∧B


本题共 1.5 分

第 12 题

命题 �→�P→Q 可读做 �P 蕴涵 �Q,其中 �,�P,Q 是两个独立的命题。只有当命题 �P 成立而命题 �Q 不成立时, 命题 �→�P→Q 的值为 false,其他情况均为 true。与命题 �→�P→Q 等价的逻辑关系式是( )。

  1.  A. 

    ¬ P∨Q

     B. 

    P∧Q

     C. 

    ¬ (P∨Q)

     D. 

    ¬ (¬ Q∧P)


本题共 1.5 分

第 13 题

(2070)16+(34)8(2070)16​+(34)8​ 的结果是( )。

  1.  A. 

    (8332)10(8332)10​

     B. 

    (208�)16(208C)16​

     C. 

    (100000000110)2(100000000110)2​

     D. 

    (20214)8(20214)8​


本题共 1.5 分

第 14 题

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

  1.  A. 

    4 2 6 5 1 7 3

     B. 

    4 2 5 6 1 3 7

     C. 

    4 2 3 1 5 4 7

     D. 

    4 2 5 6 1 7 3


本题共 1.5 分

第 15 题

冗余数据是指可以由其他数据导出的数据,例如,数据库中已存放了学生的数学、语文和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看作冗余数据。冗余数据往往会造成数据的不一致, 例如,上面 44 个数据如果都是输入的,由于操作错误使总分不等于三科成绩之和,就会产生矛盾。下面 关于冗余数据的说法中,正确的是( )。

  1.  A. 

    应该在数据库中消除一切冗余数据

     B. 

    与用高级语言编写的数据处理系统相比,用关系数据库编写的系统更容易消除冗余数据

     C. 

    为了提高查询效率,在数据库中可以适当保留一些冗余数据,但更新时要做相容性检验

     D. 

    做相容性检验会降低效率,可以不理睬数据库中的冗余数据


本题共 1.5 分

第 16 题

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

编者注:由于试题为 20072007 年的试题,请根据 20072007 年的实际情况作答。

  1.  A. 

    gcc

     B. 

    g++

     C. 

    Turbo C

     D. 

    free pascal


本题共 1.5 分

第 17 题

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

  1.  A. 

    硬盘

     B. 

    ROM

     C. 

    显存

     D. 

    RAM


本题共 1.5 分

第 18 题

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

  1.  A. 

    高级语言比汇编语言更高级,是因为它的程序的运行效率更高

     B. 

    随着 Pascal、C 等高级语言的出现,机器语言和汇编语言已经退出了历史舞台

     C. 

    高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上

     D. 

    C 是一种面向过程的高级计算机语言


本题共 1.5 分

第 19 题

在下列关于算法复杂性的说法中,正确的有( )。

  1.  A. 

    算法的时间复杂度,是指它在某台计算机上具体实现时的运行时间

     B. 

    算法的时间复杂度,是指对于该算法的一种或几种主要的运算,运算的次数与问题的规模之间的函数关系

     C. 

    一个问题如果是 NPC 类的,就意味着在解决该问题时,不存在一个具有多项式时间复杂度的算法.但这一点还没有得到理论上的证实,也没有被否定

     D. 

    一个问题如果是 NP 类的,与 C 有相同的结论


本题共 1.5 分

第 20 题

近 20 年来,许多计算机专家都大力推崇递归算法,认为它是解决较复杂问题的强有力的工具。在下列关于递归算法的说法中,正确的是( )。

  1.  A. 

    在 1977 年前后形成标准的计算机高级语言 FORTRAN77 禁止在程序使用递归,原因之一是该方法可能会占用更多的内存空间

     B. 

    和非递归算法相比,解决同一个问题,递归算法一般运行得更快一些

     C. 

    对于较复杂的问题,用递归方式编程往往比非递归方式更容易一些

     D. 

    对于已经定义好的标准数学函数 sin(x),应用程序中的语句 y=sin(sin(x)); 就是一种递归调用


本题共 1.5 分

第 21 题

给定 �n 个有标号的球,标号依次为 1,2,…,�1,2,…,n。将这 �n 个球放入 �r 个相同的盒子里,不允许有空盒,其不同放置方法的总数记为 �(�,�)S(n,r)。例如,�(4,2)=7S(4,2)=7,这 77 种不同的放置方法依次为 {(1),(234)}{(1),(234)},{(2),(134)}{(2),(134)},{(3),(124)}{(3),(124)},{(4),(123)}{(4),(123)},{(12),(34)}{(12),(34)},{(13),(24)}{(13),(24)},{(14),(23)}{(14),(23)}。当 �=7,�=4n=7,r=4 时,�(7,4)=S(7,4)= _____________。


本题共 5 分

第 22 题

�N 个人在操场里围成一圈,将这 �N 个人按顺时针方向从 11 到 �N 编号,然后,从第一个人起,每隔一个人让下一个人离开操场,显然,第一轮过后,具有偶数编号的人都离开了操场。依次做下去,直到操场只剩下一个人,记这个人的编号为 �(�)J(N) ,例如,�(5)=3J(5)=3 ,�(10)=5J(10)=5 ,等等。则 �(400)=J(400)=______________。

(提示:对 �=2�+�N=2m+r 进行分析,其中 0≤�<2�0≤r<2m )。


本题共 5 分

第 23 题

#include <stdio.h>
int main()
{
	int i, p[5], q[5], x, y = 20;
	for ( i = 0; i <= 4; i++ )
		scanf( "%d", &p[i] );
	q[0]	= (p[0] + p[1]) + (p[2] + p[3] + p[4]) / 7;
	q[1]	= p[0] + p[1] / ( (p[2] + p[3]) / p[4]);
	q[2]	= p[0] * p[1] / p[2];
	q[3]	= q[0] * q[1];
	q[4]	= q[1] + q[2] + q[3];
	x	= (q[0] + q[4] + 2) - p[(q[3] + 3) % 4];
	if ( x > 10 )
		y += (q[1] * 100 - q[3]) / (p[p[4] % 3] * 5);
	else
		y += 20 + (q[2] * 100 - q[3]) / (p[p[4] % 3] * 5);
	printf( "%d,%d\n", x, y );
	return(0);
}
/*注:本例中,给定的输入数据可以避免分母为 0 或数组元素下标越界。*/ 

输入:6 6 5 5 3
输出:_______________


本题共 8 分

第 24 题

#include <stdio.h>
void fun( int *a, int *b )
{
	int *k;
	k = a; a = b; b = k;
}


main()
{
	int a = 3, b = 6, *x = &a, *y = &b;
	fun( x, y );
	printf( "No.1: %d,%d ", a, b );
	fun( &a, &b );
	printf( "No.2: %d,%d\n", a, b );
}

输出:____________________


本题共 8 分

第 25 题

看程序写结果

#include "math.h"
#include "stdio.h"
main()
{
	int	a1[51] = { 0 };
	int	i, j, t, t2, n = 50;
	for ( i = 2; i <= sqrt( n ); i++ )
		if ( a1[i] == 0 )
		{
			t2 = n / i;
			for ( j = 2; j <= t2; j++ )
				a1[i * j] = 1;
		}
	t = 0;
	for ( i = 2; i <= n; i++ )
		if ( a1[i] == 0 )
		{
			printf( "%4d", i ); t++;
			if ( t % 10 == 0 )
				printf( "\n" );
		}
	printf( "\n" );
}

输出: __________


本题共 8 分

第 26 题

看程序写结果

#include "stdio.h"
char	ch[] = { 'q', 'A', 'S', 'O', 'R', 'T', 'E', 'X', 'A', 'M', 'P', 'L', 'E' };
int	n = 12;
void shift( int k, int n )
{
	char	v;
	int	j;
	v = ch[k]; j = k + k;
	while ( j <= n )
	{
		if ( (j < n) && (ch[j] < ch[j + 1]) )
			j++;
		if ( v < ch[j] )
		{
			ch[j / 2] = ch[j]; j *= 2;
		}else
			return;
		ch[j / 2] = v;
	}
}


void hpsrt( void )
{
	int	k;
	char	tmp;
	for ( k = n / 2; k > 0; k-- )
		shift( k, n );    /* 建堆*/
	printf( "No.1: " );
	for ( k = 1; k <= n; k++ )
		putchar( ch[k] );
	putchar( '\n' );
	for ( k = n; k > 0; k-- )
	{
		tmp = ch[1]; ch[1] = ch[k]; ch[k] = tmp;
		shift( 1, k - 1 );
	}
}


main()
{
	int k;
	hpsrt();
	printf( "No.2: " );
	for ( k = 1; k <= n; k++ )
		putchar( ch[k] );
	putchar( '\n' );
}

输出:________


本题共 2 分

第 27 题

(格雷码,Gray Code)格雷码是对十进制数的一种二进制编码。编码顺序与相应的十进制数的大小不一致。其特点是:对于两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数之间也仅有一个二进制位不同,以 44 位二进制数为例,编码如下:

十进制数格雷码十进制数格雷码
00000000008811001100
11000100019911011101
2200110011101011111111
3300100010111111101110
4401100110121210101010
5501110111131310111011
6601010101141410011001
7701000100151510001000

如果把每个二进制的位看作一个开关,则将一个数变为相邻的另一个数,只须改动一个开关。因此,格雷码广泛用于信号处理、数-模转换等领域。

下面程序的任务是:由键盘输入二进制数的位数 �(�<16)n(n<16),再输入一个十进制数 �(0≤�<2�)m(0≤m<2n),然后输出对应于 �m 的格雷码(共 �n 位,用数组 gr[] 存放)。

为了将程序补充完整,你必须认真分析上表的规律,特别是对格雷码固定的某一位,从哪个十进制数起,由 00 变为 11,或由 11 变为 00。

#include <stdio.h>
main()
{
	int bound = 1, m, n, i, j, b, p, gr[15];
	printf( "input n,m\n" );
	scanf( "%d%d", &n, &m );
	for ( i = 1; i <= n; i++ )
		bound = ①;
	if ( m < 0 || m >= bound )
	{
		printf( "Data error!\n" );
		②;
	}
	b = 1;
	for ( i = 1; i <= n; i++ )
	{
		p = 0; b = b * 2;
		for ( ③; j <= m; j++ )
			if ( ④ )
				p = 1 - p;
		gr[i] = p;
	}
	for ( i = n; ⑤ )
		printf( "%1d", gr[i] );  /* 在"%1d" 中出现的是数字1,不是字母l */
	printf( "\n" );
}
  1. 1.

  2. 2.

  3. 3.

  4. 4.

  5. 5.


本题共 10 分

第 28 题

(连续邮资问题)某国发行了 �n 种不同面值的邮票,并规定每封信最多允许贴 �m 张邮票,在这些约束下,为了能贴出 {1,2,3,…,maxvalue}{1,2,3,…,maxvalue}连续整数集合的所有邮资,并使 maxvaluemaxvalue 的值最大,应该如何设计各邮票的面值?例如,当 �=5,�=4n=5,m=4 时,面值设计为 {1,3,11,15,32}{1,3,11,15,32},可使 maxvaluemaxvalue 达到最大值 7070(或者说,用这些面值的 11 至 44 张邮票可以表示不超过 7070 的所有邮资,但无法表示邮资 7171。而用其他面值的 11 至 44 张邮票如果可以表示不超过 �k 的所有邮资,必有 �≤70k≤70)。

下面是用递归回溯求解连续邮资问题的程序。数组 x[1:n] 表示 �n 种不同的邮票面值,并约定各元素按下标是严格递增的。数组 bestx[1:n] 存放使 maxvaluemaxvalue 达到最大值的邮票面值(最优解),数组 y[maxl] 用于记录当前已选定的邮票面值 x[1:i] 能贴出的各种邮资所需的最少邮票张数。请将程序补充完整。

#include <stdio.h>
#define NN	20
#define maxint	30000
#define maxl	500 /*邮资的最大值*/
int n, m, bestx[NN], x[NN], y[maxl], maxvalue = 0;
void result()
{
	//输出结果: 最大值:maxvalue 及最优解:bestx[1:n](略)
}


void backtrace( int i, int r )
{
	int j, k, z[maxl];
	for ( j = 0; j <= ①; j++ )
		if ( y[j] < m )
			for ( k = 1; k <= m - y[j]; k++ )
				if ( y[j] + k <= y[②] )
					y[③] = y[j] + k;
	while ( y[r] < maxint )
		r++;
	if ( i > n )
	{
		if ( r - 1 > maxvalue )
		{
			maxvalue = ④;
			for ( j = 1; j <= n; j++ )
				bestx[j] = x[j];
		}
		return;
	}
	for ( k = 0; k < maxl; k++ )
		z[k] = y[k];
	for ( j = ⑤; j <= r; j++ )
	{
		x[i] = j;
		⑥;
		for ( k = 0; k < maxl; k++ )
			y[k] = z[k];
	}
}


void main()
{
	int j;
	printf( "input n,m:\n" );
	scanf( “ % d % d ”, &n, &m );
	for ( j = 1; j < maxl; j++ )
		y[j] = maxint;
	y[0] = 0; x[0] = 0; x[1] = 1;
	backtrace( 2, 1 );
	result();
}

 接下来是答案,大家自行参考!!!

答案

第 1 题

在以下各项中,( )不是 CPU 的组成部分。

  1.  A. 

    控制器

     B. 

    运算器

     C. 

    寄存器

     D. 

    主板

     E. 

    算术逻辑单元(ALU)

    正确答案: D


得分: 0 / 1.5 分

第 2 题

在关系数据库中,存放在数据库中的数据的逻辑结构以( )为主。

  1.  A. 

    二叉树

     B. 

    多叉树

     C. 

    哈希表

     D. 

    B+ 树

     E. 

    二维表

    正确答案: E


得分: 0 / 1.5 分

第 3 题

在下列各项中,只有( )不是计算机存储容量的常用单位。

  1.  A. 

    Byte

     B. 

    KB

     C. 

    MB

     D. 

    UB

     E. 

    TB

    正确答案: D


得分: 0 / 1.5 分

第 4 题

ASCII 码的含义是( )。

  1.  A. 

    二—十进制转换码

     B. 

    美国信息交换标准代码

     C. 

    数字的二进制编码

     D. 

    计算机可处理字符的唯一编码

     E. 

    常用字符的二进制编码

    正确答案: B


得分: 0 / 1.5 分

第 5 题

在 C++ 语言中,表达式 23|2^5 的值是( )

  1.  A. 

    23

     B. 

    1

     C. 

    18

     D. 

    32

     E. 

    24

    正确答案: A


得分: 0 / 1.5 分

第 6 题

在 C 语言中,判断 �a 等于 00 或 �b 等于 00 或 �c 等于 00 的正确的条件表达式是( )

  1.  A. 

    !((a!=0)||(b!=0)||(c!=0))

     B. 

    !((a!=0)&&(b!=0)&&(c!=0))

     C. 

    !(a==0&&b==0)||(c!=0)

     D. 

    (a=0)&&(b=0)&&(c=0)

     E. 

    !((a=0)||(b=0)||(c=0))

    正确答案: B


得分: 0 / 1.5 分

第 7 题

地面上有标号为 �,�,�A,B,C 的 33 根细柱,在 �A 柱上放有 1010 个直径相同中间有孔的圆盘,从上到下依次编号为 1,2,3,…1,2,3,…,将 �A 柱上的部分盘子经过 �B 柱移入 �C 柱,也可以在 �B 柱上暂存。如果 �B 柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么,在 �C 柱上,从下 到上的盘子的编号为( )。

  1.  A. 

    2 4 3 6 5 7

     B. 

    2 4 1 2 5 7

     C. 

    2 4 3 1 7 6

     D. 

    2 4 3 6 7 5

     E. 

    2 1 4 3 7 5

    正确答案: D


得分: 0 / 1.5 分

第 8 题

与十进制数 17.562517.5625 对应的 88 进制数是( )。

  1.  A. 

    21.562521.5625

     B. 

    21.4421.44

     C. 

    21.7321.73

     D. 

    21.73121.731

     E. 

    前 44 个答案都不对

    正确答案: B


得分: 0 / 1.5 分

第 9 题

欧拉图 �G 是指可以构成一个闭回路的图,且图 �G 的每一条边恰好在这个闭回路上出现一次(即一笔画成)。在以下各个描述中,不一定是欧拉图的是( )。

  1.  A. 

    图 �G 中没有度为奇数的顶点

     B. 

    包含欧拉环游的图(欧拉环游是指通过图中每边恰好一次的闭路径)

     C. 

    包含欧拉闭迹的图(欧拉迹是指通过图中每边恰好一次的路径)

     D. 

    存在一条回路,通过每个顶点恰好一次

     E. 

    本身为闭迹的图

    正确答案: D


得分: 0 / 1.5 分

第 10 题

一个无法靠自身的控制终止的循环称为“死循环”,例如,在 C++ 语言程序中,语句 while(1) printf("*"); 就是一个死循环,运行时它将无休止地打印 * 号。下面关于死循环的说法中,只有( ) 是正确的。

  1.  A. 

    不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而, 任何编译系统都不做死循环检验

     B. 

    有些编译系统可以检测出死循环

     C. 

    死循环属于语法错误,既然编译系统能检查各种语法错误,当然也应该能检查出死循环

     D. 

    死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也是可以检测的

     E. 

    对于死循环,只能等到发生时做现场处理,没有什么更积极的手段

    正确答案: A


得分: 0 / 1.5 分

第 11 题

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

  1.  A. 

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

     B. 

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

     C. 

    A∧(B∨C∨D)∨D

     D. 

    (A∧(D∨C)) ∧B

    正确答案: ABC


得分: 0 / 1.5 分

第 12 题

命题 �→�P→Q 可读做 �P 蕴涵 �Q,其中 �,�P,Q 是两个独立的命题。只有当命题 �P 成立而命题 �Q 不成立时, 命题 �→�P→Q 的值为 false,其他情况均为 true。与命题 �→�P→Q 等价的逻辑关系式是( )。

  1.  A. 

    ¬ P∨Q

     B. 

    P∧Q

     C. 

    ¬ (P∨Q)

     D. 

    ¬ (¬ Q∧P)

    正确答案: AD


得分: 0 / 1.5 分

第 13 题

(2070)16+(34)8(2070)16​+(34)8​ 的结果是( )。

  1.  A. 

    (8332)10(8332)10​

     B. 

    (208�)16(208C)16​

     C. 

    (100000000110)2(100000000110)2​

     D. 

    (20214)8(20214)8​

    正确答案: ABD


得分: 0 / 1.5 分

第 14 题

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

  1.  A. 

    4 2 6 5 1 7 3

     B. 

    4 2 5 6 1 3 7

     C. 

    4 2 3 1 5 4 7

     D. 

    4 2 5 6 1 7 3

    正确答案: ABD


得分: 0 / 1.5 分

第 15 题

冗余数据是指可以由其他数据导出的数据,例如,数据库中已存放了学生的数学、语文和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看作冗余数据。冗余数据往往会造成数据的不一致, 例如,上面 44 个数据如果都是输入的,由于操作错误使总分不等于三科成绩之和,就会产生矛盾。下面 关于冗余数据的说法中,正确的是( )。

  1.  A. 

    应该在数据库中消除一切冗余数据

     B. 

    与用高级语言编写的数据处理系统相比,用关系数据库编写的系统更容易消除冗余数据

     C. 

    为了提高查询效率,在数据库中可以适当保留一些冗余数据,但更新时要做相容性检验

     D. 

    做相容性检验会降低效率,可以不理睬数据库中的冗余数据

    正确答案: BC


得分: 0 / 1.5 分

第 16 题

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

编者注:由于试题为 20072007 年的试题,请根据 20072007 年的实际情况作答。

  1.  A. 

    gcc

     B. 

    g++

     C. 

    Turbo C

     D. 

    free pascal

    正确答案: ABD


得分: 0 / 1.5 分

第 17 题

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

  1.  A. 

    硬盘

     B. 

    ROM

     C. 

    显存

     D. 

    RAM

    正确答案: AB


得分: 0 / 1.5 分

第 18 题

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

  1.  A. 

    高级语言比汇编语言更高级,是因为它的程序的运行效率更高

     B. 

    随着 Pascal、C 等高级语言的出现,机器语言和汇编语言已经退出了历史舞台

     C. 

    高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上

     D. 

    C 是一种面向过程的高级计算机语言

    正确答案: CD


得分: 0 / 1.5 分

第 19 题

在下列关于算法复杂性的说法中,正确的有( )。

  1.  A. 

    算法的时间复杂度,是指它在某台计算机上具体实现时的运行时间

     B. 

    算法的时间复杂度,是指对于该算法的一种或几种主要的运算,运算的次数与问题的规模之间的函数关系

     C. 

    一个问题如果是 NPC 类的,就意味着在解决该问题时,不存在一个具有多项式时间复杂度的算法.但这一点还没有得到理论上的证实,也没有被否定

     D. 

    一个问题如果是 NP 类的,与 C 有相同的结论

    正确答案: BC


得分: 0 / 1.5 分

第 20 题

近 20 年来,许多计算机专家都大力推崇递归算法,认为它是解决较复杂问题的强有力的工具。在下列关于递归算法的说法中,正确的是( )。

  1.  A. 

    在 1977 年前后形成标准的计算机高级语言 FORTRAN77 禁止在程序使用递归,原因之一是该方法可能会占用更多的内存空间

     B. 

    和非递归算法相比,解决同一个问题,递归算法一般运行得更快一些

     C. 

    对于较复杂的问题,用递归方式编程往往比非递归方式更容易一些

     D. 

    对于已经定义好的标准数学函数 sin(x),应用程序中的语句 y=sin(sin(x)); 就是一种递归调用

    正确答案: AC


得分: 0 / 1.5 分

第 21 题

给定 �n 个有标号的球,标号依次为 1,2,…,�1,2,…,n。将这 �n 个球放入 �r 个相同的盒子里,不允许有空盒,其不同放置方法的总数记为 �(�,�)S(n,r)。例如,�(4,2)=7S(4,2)=7,这 77 种不同的放置方法依次为 {(1),(234)}{(1),(234)},{(2),(134)}{(2),(134)},{(3),(124)}{(3),(124)},{(4),(123)}{(4),(123)},{(12),(34)}{(12),(34)},{(13),(24)}{(13),(24)},{(14),(23)}{(14),(23)}。当 �=7,�=4n=7,r=4 时,�(7,4)=S(7,4)= _____________。

  1. 正确答案: 350


得分: 0 / 5 分

第 22 题

�N 个人在操场里围成一圈,将这 �N 个人按顺时针方向从 11 到 �N 编号,然后,从第一个人起,每隔一个人让下一个人离开操场,显然,第一轮过后,具有偶数编号的人都离开了操场。依次做下去,直到操场只剩下一个人,记这个人的编号为 �(�)J(N) ,例如,�(5)=3J(5)=3 ,�(10)=5J(10)=5 ,等等。则 �(400)=J(400)=______________。

(提示:对 �=2�+�N=2m+r 进行分析,其中 0≤�<2�0≤r<2m )。

  1. 正确答案: 289


得分: 0 / 5 分

第 23 题

#include <stdio.h>
int main()
{
	int i, p[5], q[5], x, y = 20;
	for ( i = 0; i <= 4; i++ )
		scanf( "%d", &p[i] );
	q[0]	= (p[0] + p[1]) + (p[2] + p[3] + p[4]) / 7;
	q[1]	= p[0] + p[1] / ( (p[2] + p[3]) / p[4]);
	q[2]	= p[0] * p[1] / p[2];
	q[3]	= q[0] * q[1];
	q[4]	= q[1] + q[2] + q[3];
	x	= (q[0] + q[4] + 2) - p[(q[3] + 3) % 4];
	if ( x > 10 )
		y += (q[1] * 100 - q[3]) / (p[p[4] % 3] * 5);
	else
		y += 20 + (q[2] * 100 - q[3]) / (p[p[4] % 3] * 5);
	printf( "%d,%d\n", x, y );
	return(0);
}
/*注:本例中,给定的输入数据可以避免分母为 0 或数组元素下标越界。*/ 

输入:6 6 5 5 3
输出:_______________

  1. 正确答案: 129,43


得分: 0 / 8 分

第 24 题

#include <stdio.h>
void fun( int *a, int *b )
{
	int *k;
	k = a; a = b; b = k;
}


main()
{
	int a = 3, b = 6, *x = &a, *y = &b;
	fun( x, y );
	printf( "No.1: %d,%d ", a, b );
	fun( &a, &b );
	printf( "No.2: %d,%d\n", a, b );
}

输出:____________________

  1. 正确答案: No.1:3,6 No.2:3,6


得分: 0 / 8 分

第 25 题

看程序写结果

#include "math.h"
#include "stdio.h"
main()
{
	int	a1[51] = { 0 };
	int	i, j, t, t2, n = 50;
	for ( i = 2; i <= sqrt( n ); i++ )
		if ( a1[i] == 0 )
		{
			t2 = n / i;
			for ( j = 2; j <= t2; j++ )
				a1[i * j] = 1;
		}
	t = 0;
	for ( i = 2; i <= n; i++ )
		if ( a1[i] == 0 )
		{
			printf( "%4d", i ); t++;
			if ( t % 10 == 0 )
				printf( "\n" );
		}
	printf( "\n" );
}

输出: __________

  1. 正确答案: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47


得分: 0 / 8 分

第 26 题

看程序写结果

#include "stdio.h"
char	ch[] = { 'q', 'A', 'S', 'O', 'R', 'T', 'E', 'X', 'A', 'M', 'P', 'L', 'E' };
int	n = 12;
void shift( int k, int n )
{
	char	v;
	int	j;
	v = ch[k]; j = k + k;
	while ( j <= n )
	{
		if ( (j < n) && (ch[j] < ch[j + 1]) )
			j++;
		if ( v < ch[j] )
		{
			ch[j / 2] = ch[j]; j *= 2;
		}else
			return;
		ch[j / 2] = v;
	}
}


void hpsrt( void )
{
	int	k;
	char	tmp;
	for ( k = n / 2; k > 0; k-- )
		shift( k, n );    /* 建堆*/
	printf( "No.1: " );
	for ( k = 1; k <= n; k++ )
		putchar( ch[k] );
	putchar( '\n' );
	for ( k = n; k > 0; k-- )
	{
		tmp = ch[1]; ch[1] = ch[k]; ch[k] = tmp;
		shift( 1, k - 1 );
	}
}


main()
{
	int k;
	hpsrt();
	printf( "No.2: " );
	for ( k = 1; k <= n; k++ )
		putchar( ch[k] );
	putchar( '\n' );
}

输出:________

  1. 正确答案: No.1:XTORSEAAMPLE No.2:AAEELMOPRSTX


得分: 0 / 2 分

第 27 题

(格雷码,Gray Code)格雷码是对十进制数的一种二进制编码。编码顺序与相应的十进制数的大小不一致。其特点是:对于两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数之间也仅有一个二进制位不同,以 44 位二进制数为例,编码如下:

十进制数格雷码十进制数格雷码
00000000008811001100
11000100019911011101
2200110011101011111111
3300100010111111101110
4401100110121210101010
5501110111131310111011
6601010101141410011001
7701000100151510001000

如果把每个二进制的位看作一个开关,则将一个数变为相邻的另一个数,只须改动一个开关。因此,格雷码广泛用于信号处理、数-模转换等领域。

下面程序的任务是:由键盘输入二进制数的位数 �(�<16)n(n<16),再输入一个十进制数 �(0≤�<2�)m(0≤m<2n),然后输出对应于 �m 的格雷码(共 �n 位,用数组 gr[] 存放)。

为了将程序补充完整,你必须认真分析上表的规律,特别是对格雷码固定的某一位,从哪个十进制数起,由 00 变为 11,或由 11 变为 00。

#include <stdio.h>
main()
{
	int bound = 1, m, n, i, j, b, p, gr[15];
	printf( "input n,m\n" );
	scanf( "%d%d", &n, &m );
	for ( i = 1; i <= n; i++ )
		bound = ①;
	if ( m < 0 || m >= bound )
	{
		printf( "Data error!\n" );
		②;
	}
	b = 1;
	for ( i = 1; i <= n; i++ )
	{
		p = 0; b = b * 2;
		for ( ③; j <= m; j++ )
			if ( ④ )
				p = 1 - p;
		gr[i] = p;
	}
	for ( i = n; ⑤ )
		printf( "%1d", gr[i] );  /* 在"%1d" 中出现的是数字1,不是字母l */
	printf( "\n" );
}
  1. 1.

    正确答案: bound*2

  2. 2.

    正确答案: return

  3. 3.

    正确答案: j=0

  4. 4.

    正确答案: (j % b-(b / 2))=0

  5. 5.

    正确答案: <=1


得分: 0 / 10 分

第 28 题

(连续邮资问题)某国发行了 �n 种不同面值的邮票,并规定每封信最多允许贴 �m 张邮票,在这些约束下,为了能贴出 {1,2,3,…,maxvalue}{1,2,3,…,maxvalue}连续整数集合的所有邮资,并使 maxvaluemaxvalue 的值最大,应该如何设计各邮票的面值?例如,当 �=5,�=4n=5,m=4 时,面值设计为 {1,3,11,15,32}{1,3,11,15,32},可使 maxvaluemaxvalue 达到最大值 7070(或者说,用这些面值的 11 至 44 张邮票可以表示不超过 7070 的所有邮资,但无法表示邮资 7171。而用其他面值的 11 至 44 张邮票如果可以表示不超过 �k 的所有邮资,必有 �≤70k≤70)。

下面是用递归回溯求解连续邮资问题的程序。数组 x[1:n] 表示 �n 种不同的邮票面值,并约定各元素按下标是严格递增的。数组 bestx[1:n] 存放使 maxvaluemaxvalue 达到最大值的邮票面值(最优解),数组 y[maxl] 用于记录当前已选定的邮票面值 x[1:i] 能贴出的各种邮资所需的最少邮票张数。请将程序补充完整。

#include <stdio.h>
#define NN	20
#define maxint	30000
#define maxl	500 /*邮资的最大值*/
int n, m, bestx[NN], x[NN], y[maxl], maxvalue = 0;
void result()
{
	//输出结果: 最大值:maxvalue 及最优解:bestx[1:n](略)
}


void backtrace( int i, int r )
{
	int j, k, z[maxl];
	for ( j = 0; j <= ①; j++ )
		if ( y[j] < m )
			for ( k = 1; k <= m - y[j]; k++ )
				if ( y[j] + k <= y[②] )
					y[③] = y[j] + k;
	while ( y[r] < maxint )
		r++;
	if ( i > n )
	{
		if ( r - 1 > maxvalue )
		{
			maxvalue = ④;
			for ( j = 1; j <= n; j++ )
				bestx[j] = x[j];
		}
		return;
	}
	for ( k = 0; k < maxl; k++ )
		z[k] = y[k];
	for ( j = ⑤; j <= r; j++ )
	{
		x[i] = j;
		⑥;
		for ( k = 0; k < maxl; k++ )
			y[k] = z[k];
	}
}


void main()
{
	int j;
	printf( "input n,m:\n" );
	scanf( “ % d % d ”, &n, &m );
	for ( j = 1; j < maxl; j++ )
		y[j] = maxint;
	y[0] = 0; x[0] = 0; x[1] = 1;
	backtrace( 2, 1 );
	result();
}
  1. 1.

    正确答案: x[i-2]*(m-1)

  2. 2.

    正确答案: j+x[i-1]*k

  3. 3.

    正确答案: j+x[i-1]*k

  4. 4.

    正确答案: r-1

  5. 5.

    正确答案: x[i-1]+1

  6. 6.

    正确答案: backtrace(i+1,r)


得分: 0 / 18 分

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: NOIP(全国信息学奥林匹克联赛,National Olympiad in Informatics in Provinces)是中国的一项计算机编程竞赛,分为普及提高2007年的NOIP普及初赛试题是一道编程题。 此题要求编写一个程序,统计一个给定整数的位数,并输出结果。例如,给定数字156,程序应输出3,因为156有3位数字。 解决这个问题的一种方法是,将给定数字转换为字符串,并计算字符串的长度。具体做法如下: 1. 首先,从输入中接收一个整数。 2. 将整数转换为字符串,可以使用内置的str()函数,它可以将整数转换为字符串类型。 3. 使用内置的len()函数获取字符串的长度。 4. 输出字符串的长度,即该数字的位数。 以下是一个简单的示例代码: ``` num = int(input("请输入一个整数:")) # 接收一个整数 num_str = str(num) # 转换为字符串 count = len(num_str) # 获取字符串长度 print("该数字的位数为:" + str(count)) # 输出结果 ``` 这段代码首先接收一个整数,然后将它转换为字符串。接着,通过使用len()函数获取字符串的长度,并将结果输出。 总结来说,2007NOIP普及初赛试题要求编写一个程序,统计给定整数的位数。我们可以将整数转换为字符串,然后使用len()函数获取字符串的长度,即得到该数字的位数。以上是一个简单示例代码,实现了该功能。 ### 回答2: NOI(全国青少年信息学奥林匹克竞赛)是中国举办的一项重要的计算机竞赛,包括高级和普及两个级别。而NOIP 2007普及初赛试题是该比赛中一道典型的问题。以下是对这个试题的300字中文回答: NOIP 2007普及初赛试题要求我们计算一个数的阶乘结果中末尾0的个数。阶乘,即一个数的所有正整数的乘积。题目给出了一个整数N,要求计算N的阶乘结果末尾0的个数。 我们可以观察到,N的阶乘结果末尾零的个数,取决于N中因子5的个数。因为每枚一次因子5,就会多一个末尾零。通过这个规律,我们可以将问题转化为计算N中因子5的个数。 首先,我们从1到N遍历每个数,看其是否能被5整除,如果可以,则计数器加一,代表多了一个因子5。接着继续判断当前数是否能被5整除,重复上述操作,直到当前数不能被5整除为止。最终,计数器的值就代表了N的阶乘结果中末尾0的个数。 通过这种方法,我们可以在O(logN)的时间复杂度内求得结果。值得注意的是,如果N特别大,超出了整型数所能表示的范围,需要使用更大的数据类型来存储结果。 总而言之,NOIP 2007普及初赛试题通过计算一个数的阶乘结果中末尾0的个数,考察了我们对数学规律的理解和代码的实现能力。我们可以通过观察规律,将问题转化为计算因子5的个数,并在较低的时间复杂度内求解。这是一个典型的数学问题,需要我们在解决过程中运用数学思维和编程技巧。 ### 回答3: noip 2007 普及初赛试题是全国信息学奥林匹克竞赛的一份初级试题,旨在考查学生在计算机编程和算法方面的基本能力。 该试题包含多个题目,其中一个例题是求最大公约数。该题要求给定两个正整数A和B,计算它们的最大公约数。最大公约数是指能够同时整除A和B的最大正整数。 解答这个问题的一种常见算法是欧几里德算法。该算法的基本思想是通过连续进行取模运算,将较大的数变成较小的数,直到整除为止。具体步骤如下: 1. 如果A能够整除B,则B就是最大公约数; 2. 否则,将B取模A,得到的余数记为R; 3. 将A赋值为原来的B,将B赋值为原来的R; 4. 重复步骤1和步骤2,直到B能够整除A为止。 通过使用欧几里德算法,可以快速地求出A和B的最大公约数。 除了求最大公约数之外,试题还包含其他题目,如字符串处理、排序算法、简单的图论等。这些题目旨在考察学生的编程能力、算法设计和实现能力。 参加noip 2007 普及初赛试题的考生需要具备一定的编程基础知识和算法理解能力。通过解答这些问题,学生不仅可以提高自己的编程技能,还可以锻炼自己的逻辑思维和问题解决能力。 参加noip 2007 普及初赛试题的考生需要认真学习相关的编程知识和算法理论,多进行编程练习和模拟考试,提升自己的编程水平和应试能力,为将来参加更高级别的信息学竞赛做好准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值