#A. 初赛模拟题J组

    Type: Objective

初赛模拟题J组

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

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

1, (1047)8(1047)_8 =( ) {{ select(1) }}

  • (1011011101)2(1011011101)_2
  • (11010)5(11010)_5
  • (20213)4(20213)_4
  • (308)16(308)_{16}

2, 若逻辑变量 A、C 为真,B、D 为假,以下逻辑表达式的值为假的是( ) 。{{ select(2) }}

  • (BCD)DA(B∨C∨D)∨D∧A
  • ((AB)C)B((﹁A∧B)∨C)∧﹁B
  • (AB)(CDA)(A∧B)∨﹁(C∧D∨﹁A)
  • A(DC)BA∧(D∨﹁C)∧B

3, 小恺编写了如下函数,希望计算斐波那契数列 f(n)第 n 项对 10000 取余 数的值:

int f(int x) 
{
    if(x <= 2)
        return 1;
    int ans = f(x - 1) + f(x - 2);
    ans %= 10000;
    return ans;
}

在运行空间限制 128MB、栈空间不超过空间限制、运行时限 1 秒的情况 下,在主函数中运行函数 f(12345),则最有可能首先发生什么问题?{{ select(3) }}

  • 运行时间超时
  • 栈溢出
  • 访问无效内存
  • 返回错误的答案

4, 表达式 a+b(cd)/efa+b*(c-d)/e-f的后缀表达式为( )。{{ select(4) }}

  • +a/bccdef-+a/*b-c-cdef
  • abcde/+fabcd-*e/+f-
  • +abcd/ef+ab*-cd/e-f
  • fe/ddb+af-e/d-d*b+a

5, 某个 MV 是一段时长 4 分整的视频文件。它每秒播放 10 帧图像,每帧图像是一幅分辨率为 2048×1152 像素(长宽比 16:9)的 32 位真彩色图像,其画面没有被压缩。这个视频没有音频。这个视频文件大约需要占 用多大的存储空间?( )。{{ select(5) }}

  • 21GiB
  • 27GiB
  • 168GiB
  • 2GiB

6, 如图这是一棵二叉树, 它的后序遍历是( ) image

{{ select(6) }}

  • ABDEFCABDEFC
  • DBEFACDBEFAC
  • DFEBCADFEBCA
  • ABCDEFABCDEF

7, 五个本质不同的点在没有重边或者自环的情况下,组成不同的无向图的个数是 ( )?{{ select(7) }}

  • 10
  • 1024
  • 15
  • 120

8, 设元素 a,b,c,d,e,f 依次入栈,则下列不合法的出栈序列为( )? {{ select(8) }}

  • d,c,b,e,f,a
  • f,e,d,c,b,a
  • c,d,f,e,b,a
  • e,d,b,a,f,c

9, 同时扔出 3 枚完全相同的六面骰子,每个骰子上有 1 到 6 的数字。将得到的点数排序后,有( )种不同的结果? {{ select(9) }}

  • 208
  • 56
  • 216
  • 120

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

  • 没有区别
  • 按行读的方式更高
  • 按列读的方式更高
  • 取决于数组的存储方式

11, 不考虑稳定性,下列排序方法中平均时间复杂度最大的是 ( )。{{ select(11) }}

  • 插入排序
  • 希尔排序
  • 归并排序
  • 快速排序

12, 将数组 12,23,-1,19,117,-103,79,602 中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换( )次 {{ select(12) }}

  • 4
  • 5
  • 6
  • 7

13, 3 名男生和 3 名女生围成一个圈,男生和男生不相邻,女生和女生不相邻。如果两个围成的圈经过旋转可以重合,则视为同一种方案。请问一共有几种方案? {{ select(13) }}

  • 18
  • 15
  • 12
  • 9

14, 以下关于 C++字符串的说法,错误的是( )。{{ select(14) }}

  • 定义 string 类型的字符串时,不需要预先确定它的最大长度。
  • 字符数组和 string 类型的字符串是可以相互转化的。
  • 定义字符数组 char a[100] 时并从键盘读入字符串,则读入的字符串长度不能超过 99。
  • 定义一个字符串 string s 后,获得它长度的方式就是 strlen(s)。

15, 中国计算机协会成立于( )年。{{ select(15) }}

  • 1961
  • 1962
  • 1971
  • 1972

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填×;除特殊说明外,判断题 2 分,选择题 3 分,共计 40 分)

1, 已知 1n106,1ai1061 \le n \le 10^6, 1 \le a_i \le 10^6 完成下面的判断题和选择题:

#include <iostream>

using namespace std;

const int MAXN = 1000050;

int n, a[MAXN], a1[MAXN], b[MAXN], lim;

void solve1() 
{
	for (int i = 1; i <= n; i++)
	{
		b[a[i]]++; //①
	}
	for (int i = 1; i <= lim; i++) 
	{
		if (b[i]) //②
		cout << i << " ";
	}
	cout << endl;
}

void solve2() 
{
	int cnt = 0, flag;
	for (int i = 1; i <= n; i++) 
	{
	        flag = false;
	        for (int j = 1; j <= n - 1; j++)
	        {
		        if (a[j] > a[j + 1]) 
		        {
			        swap(a[j], a[j + 1]);
			        cnt++;
			        flag = true;
		        }
	        }
            //if(flag==false)
            //    break;
	}
	for (int i = 1; i <= n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
}

int main() 
{
	cin >> n;
	for (int i = 1; i <= n; i++) 
	{
		cin >> a[i];
		a1[i] = a[i]; //③
		lim = max(a[i], lim); //④
	}
	solve1();
	for (int i = 1; i <= n; i++)
	{
		a[i] = a1[i];
	}
	solve2();
	return 0;
}

判断题

16), solve2 函数实现了选择排序。( ){{ select(16) }}

  • True
  • False

17), solve1 函数的时间复杂度为 𝑂(𝑛 + 𝑉),其中 𝑉 指的𝑎𝑖 的最大值。( ) {{ select(17) }}

  • True
  • False

18), 当输入数据为: 7 2 3 5 7 1 4 6 时,solve2 函数中的变量 cnt 最终值为 9。( ){{ select(18) }}

  • True
  • False

19), 若将 solve2 函数中的双斜杠全部移除,不会影响输出结果。( ){{ select(19) }}

  • True
  • False

20), 下列哪组数据,会使得 solve1 函数与 solve2 函数的输出结果不同?( )(假设已经输入了 𝑛 = 8)。{{ select(20) }}

  • 1 10 100 1000 10000 888 8888 88888
  • 6321 158987 16305 68486 50556 847 156505 15610
  • 777 888 999 888 777 888 999 666
  • 999993 999994 999995 999996 999997 999998 999999 1000000

21), 若要使得 solve1 和 solve2 函数的输出结果相同,则应当修改程序中的哪一处?{{ select(21) }}

输入保证 t 的长度不大于 s 的长度,且两字符串均只含有大小写字母,不是空串,type = 1,2,3,完成下面的判断题和单选题:

#include <cstdio>
#include <cstring>

const int maxn = 1003;

int type, n, m;
char s[maxn], t[maxn];

int main() 
{
	scanf("%d %s %s", &type, t, s);
	n = strlen(s); m = strlen(t);
	if (type < 2) 
	{
		for (int i = 0; i < m; ++i) 
		s[i] = t[i];
	} 
	else if (type == 2) 
	{
		strcpy(s, t);
		// 提示:如果此时调用 printf("%s\n", s),则本次输出结果为整t 字符串和换行,没有其他字符。
	} 
	else 
	{
		for (int i = 0; i < m; i += 4) 
		{
			unsigned int code = 0, pos = i;
			for (int j = 1; pos < i+4; j*=100, ++pos) 
			{
				if (pos == m) 
				{
					break;
				}
				code += t[pos] * j;
			}
			pos = i;
			while (code != 0) 
			{
				s[pos++] = code % 100;
				code /= 100;
			}
		}
	}
	for (int i = 0; i < n; ++i) 
	{
		printf("%c", s[i]);
	}
	printf("\n");
}

判断题

22), 将程序中所有的小于号 (<) 改为不等于号 (!=),则程序对所有符合要求的输入的输出结果不变。 ( ){{ select(22) }}

  • True
  • False

23), 当输入为 1 xyz abcd 时,程序的输出为 xyzd.( ) {{ select(23) }}

  • True
  • False

24), 程序在输入为 1 xyz abcd 时的输出与输入为 2 xyz abcd 的输出相同。 ( ){{ select(24) }}

  • True
  • False

25), 将程序第 25~28 行的 while 循环替换为 do-while 循环(判断条件和循环体不变),则程序对同一合法输入的输出结果一定不变。( ) {{ select(25) }}

  • True
  • False

单选题

26), 若将程序第 13 行改为 for (int i = 0; i < strlen(t); ++i) s[i] = t[i];,且已知输入的 type 一定为 1 的情况下,用𝑛 表示 𝑠 的长度,𝑚 表示 𝑡 的长度,则程序的时间复杂度为( )。{{ select(26) }}

  • O(n+m)O(n+m)
  • O(n+m2)O(n+m^2)
  • O(n2+m)O(n^2+m)
  • O(n2+m2)O(n^2+m^2)

27), 给程序分别输入选项 ( ) 的两组输入数据,得到的输出不同。{{ select(27) }}

  • 1 ab abc 和 3 ab abc
  • 1 AB ABC 和 3 AB ABC
  • 1 de fgh 和 3 de fgh
  • 1 DE FGH 和 3 DE FGH

完善程序(单选题, 每小题3分, 共计30分)

1, (支付问题)有 n 种纸币,其中第 i 种纸币的面值为 aia_i 元。每种纸币只有一张。求能支付多少种金额(不包括 0 元)。数据范围满足 n200n≤200aia_i的总和不超过 5000。

试补全程序

#include <iostream>
using namespace std;

const int MAXN = 210;
const int MAXM = 5010;
int n, m;
int f[MAXM], a[MAXN];

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) 
	{
		cin >> a[i];
		①;
	}
	②;
	for (int i = 1; i <= n; i++)
	{
		③
		{
			f[j] = ④;
		}
	}
	int ans = 0;
	for(int i = 1; i <= m; i++)
    {
        if(⑤) 
        {
	        ans++;
        }
    }
	cout << ans;
	return 0;
}

28), ① 处应填( )。{{ select(28) }}

  • n += a[i]
  • m += a[i]
  • n = a[i]
  • m = a[i]

29), ② 处应填( )。{{ select(29) }}

  • f[0] = 1
  • f[1] = 1
  • a[0] = 1
  • a[1] = 1

30), ③ 处应填( )。{{ select(30) }}

  • for(int j=a[i]; j<=n; j++)
  • for(int j=n; j>=a[i]; j--)
  • for(int j=a[i]; j<=m; j++)
  • for(int j=m; j>=a[i]; j--)

31), ④ 处应填( )。{{ select(31) }}

  • f[j-1] +1
  • f[j-a[i]] + 1
  • f[j] || f[j-a[i]]
  • f[j] && f[j-a[i]]

32), ⑤ 处应填( )。{{ select(32) }}

  • f[i]
  • f[i-1]
  • f[i] == f[i+1]
  • f[i] == f[i-1]

(凑出17)给定 𝑛(1𝑛20)𝑛(1 ≤ 𝑛 ≤ 20) 个互不相同的正整数 𝑎1,𝑎2,𝑎𝑛(1𝑎𝑖109)𝑎1, 𝑎2, … 𝑎𝑛(1 ≤ 𝑎𝑖 ≤10^9),将之排成一行。你需要在每个 𝑎𝑖𝑎_𝑖 前加上一个加号(+)或减号(-),使这 𝑛 个数字组成一个算式。请问是否存在一种添加符号的方案,使该算式的值为 17?如果存在,请输出 Yes,否则输出 No。

例如,给定 𝑛=5,𝑎1=1,𝑎2=4,𝑎3=5,𝑎4=9,𝑎5=8𝑛 = 5, 𝑎1 = 1, 𝑎2 = 4, 𝑎3 = 5, 𝑎4 = 9, 𝑎5 = 8,则 𝑎1𝑎2+𝑎3+𝑎4+𝑎5=17−𝑎1 − 𝑎2 + 𝑎3 +𝑎4 + 𝑎5 = 17

提示:使用穷举法解决这个问题。

试补全程序。

#include <cstdio>

using namespace std;

const int maxn = 25;
const int aim = 17;

int n;
int a[maxn];
bool ans;

int getBit(const int s, int p) 
{
	return ①;
}

int main() 
{
	scanf("%d", &n);
	for (②) 
	{
		scanf("%d", a + i);
	}
	for (int s=0, upperBound = ③; s <= upperBound; ++s) 
	{
		④;
		for (int j = 0; j < n; ++j) if (getBit(s, j) == 1) 
		{
			sum += a[j];
		} 
		else 
		{
			⑤;
		}
		if (int(sum) == aim) 
		{
			ans = true;
			break;
		}
	}
	printf("%s\n", ans ? "Yes" : "No");
}

33), ① 处应填( )。{{ select(33) }}

  • (s >> p) & 1
  • (s << p) & 1
  • s & (1 << p) & 1
  • s & (1 >> p) & 1

34), ② 处应填( )。{{ select(34) }}

  • int i = 0; i <= n; ++i
  • int i = 1; i <= n; ++i
  • int i = 0; i < n; ++i
  • int i = 1; i < n; ++i

35), ③ 处应填( )。{{ select(35) }}

  • 1 << n
  • (1 << n) | 1
  • (1 << n) + 1
  • (1 << n) - 1

36), ④ 处应填( )。{{ select(36) }}

  • int sum = 0
  • unsigned long long sum = 0
  • unsigned short sum = 0
  • unsigned int sum = 0

37), ⑤ 处应填( )。{{ select(37) }}

  • sum = a[j] + sum
  • sum = a[j] - sum
  • sum = -a[j] + sum
  • sum = -a[j] - sum

初赛模拟卷G

Not Attended
Status
Done
Rule
OI
Problem
3
Start at
2024-8-21 16:15
End at
2024-8-22 13:45
Duration
2 hour(s)
Host
Partic.
35