选择题 共15道
判断题 共10道
编程题 共2道
下面关于链表和数组的描述,错误的是( )。
通过( )操作,能完成在双向循环链表结点 p 之后插入结点 s 的功能(其中 next 域为结点的直接后继,prev 域为结点的直接前驱)。
对下面两个函数,说法错误的是( )。
有如下函数 fun ,则 fun(20, 12) 的返回值为( )。
下述代码实现素数表的埃拉托斯特尼筛法,筛选出所有小于等于 n 的素数,则横线上应填的最佳代码是( )。
下述代码实现素数表的线性筛法,筛选出所有小于等于 n 的素数,则横线上应填的代码是( )。
下面函数可以将 n 的所有质因数找出来,其时间复杂度是( )。
现在用如下代码来计算 ( n个x 相乘),其时间复杂度为( )。
假设快速排序算法的输入是一个长度为n 的已排序数组,且该快速排序算法在分治过程总是选择第一个元素作为基准元素。下面选项( )描述的是在这种情况下的快速排序行为。
考虑以下C++代码实现的归并排序算法:
对长度为 n 的数组 arr ,挑用函数 merge_sort(a, 0, n-1) ,在排序过程中 merge 函数的递归调用次数大约是
( )。
现在有 n 个人要过河,每只船最多载2人,船的承重为100kg。下列代码中,数组 weight 中保存有 n 个人的体重(单位为kg),已经按从小到大排好序,代码输出过河所需要的船的数目,采用的思想为( )。
关于分治算法,以下哪个说法正确?
根据下述二分查找法,在排好序的数组 1,3,6,9,17,31,39,52,61,79 中查找数值 31 ,循环while (left <= right) 执行的次数为( )。
以下关于高精度运算的说法错误的是( )。
当 n=7时,下面函数的返回值为( )。
在操作系统中,需要对一组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU将切换到下一个进程。这种循环操作可以通过环形链表来实现。
找出自然数 n 以内的所有质数,常用算法有埃拉托斯特尼(埃氏)筛法和线性筛法,其中线性筛法效率更高。
唯一分解定理表明任何一个大于 1 的整数都可以唯一地分解为素数之和。
贪心算法通过每一步选择局部最优解,从而一定能获得最优解。
快速排序和归并排序的平均时间复杂度均为 ,且都是稳定排序。
插入排序的时间复杂度总是比快速排序低。
引入分治策略往往可以提升算法效率。一方面,分治策略减少了操作数量;另一方面,分治后有利于系统的并行优化。
二分查找要求被搜索的序列是有序的,否则无法保证正确性。
在C++语言中,递归的实现方式通常会占用更多的栈空间,可能导致栈溢出。
对于已经定义好的标准数学函数 sin(x) ,应用程序中的语句 y=sin(sin(x)); 是一种递归调用。
小杨的武器
题面描述
小杨有 n种不同的武器,他对第 i种武器的初始熟练度为 ci。
小杨会依次参加 m场战斗,每场战斗小杨只能且必须选择一种武器使用,假设小杨使用了第 i种武器参加了第j 场战斗,战斗前该武器的熟练度为 ,则战斗后小杨对该武器的熟练度会变为 。需要注意的是,aj 可能是正数,0 或负数,这意味着小杨参加战斗后对武器的熟练度可能会提高,也可能会不变,还有可能降低。
小杨想请你编写程序帮他计算出如何选择武器才能使得m 场战斗后,自己对n 种武器的熟练度的最大值尽可能大。
输入格式
输出格式
输出一个整数,代表m 场战斗后小杨对 种武器的熟练度的最大值最大是多少。
样例1
挑战怪物
小杨正在和一个怪物战斗,怪物的血量为h,只有当怪物的血量恰好为0时小杨才能够成功击败怪物。
小杨有两种攻击怪物的方式:
(1)物理攻击。假设当前为小杨第i次使用物理攻击,则会对怪物造成点伤害。
(2)魔法攻击。小杨选择任意一个质数x(x不能超过怪物当前血量)。
对怪物造成x点伤害。
由于小杨并不擅长魔法,他只能使用至多一次魔法攻击。
小杨想知道自己能否击败怪物,如果能,小杨想知道自己最少需要多少次攻击。
第一行包含一个正整数t,代表测试用例组数。
接下来是t组测试用例。对于每组测试用例,第一行包含一个正整数h,代表怪物血量。
对于每组测试用例,如果小杨能够击败怪物,输出一个整数,代表小杨需要的最少攻击次数,如果不能击败怪物,输出-1。
样例 1