测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

PROBLEM SET

题库

按难度与知识点筛选,找到适合的练习题。

共 67434 题
重置

题目列表

共 67434 题
A21987 ⼩杨⽤⼀个⼆维数组表⽰棋盘,其中 1 表⽰有棋⼦,0 表⽰没有棋⼦。他想知道第 2 ⾏第 3 列有没有棋⼦, 可采⽤的代码是:( )。int a[3][4] ={ {1,0,1, 0}, {0,1,0, 1}, {1,1,0,0} }; C-L4 -- 较难 -- A21988 ⼩杨写了如下的指针接⼒程序,程序执⾏完后变量 a 、 *p1 和 *p2 的值分别是( )。int a = 5; int* p1 = &a; int* p2 = p1; *p2= 10; C-L4 -- 较难 -- A21989 ⼩杨想让指针 p 指向整数变量 x ,正确写法是( )。 C-L4 -- 较难 -- A21990 相等序列 C-L5 -- 困难 -- A21991 数字移动 C-L5 -- 困难 -- A21992 使⽤贪⼼算法解决问题时,通过对每⼀步求局部最优解,最终⼀定能找到全局最优解。( ) C-L5 -- 困难 -- A21993 递归函数⼀定要有终⽌条件,否则可能会造成栈溢出。( ) C-L5 -- 困难 -- A21994 以下fib函数计算第n项斐波那契数(fib(0)=0,fib(1)=1),其时间复杂度为O(n)。( )int fib(int n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); } C-L5 -- 困难 -- A21995 贪⼼算法在每⼀步都做出当前看来最优的局部选择,并且⼀旦做出选择就不再回溯;⽽分治算法将问题分解为若⼲⼦问题分别求解,再将⼦问题的解合并得到原问题的解。( ) C-L5 -- 困难 -- A21996 通过在数组的第⼀个、最中间和最后⼀个这3个数据中选择中间值作为枢轴(⽐较基准),快速排序算法可降低落⼊最坏情况的概率。( ) C-L5 -- 困难 -- A21997 ⼆分查找仅适⽤于有序数据。若输⼊数据⽆序,当仅进⾏⼀次查找时,为了使⽤⼆分⽽排序通常不划算。( ) C-L5 -- 困难 -- A21998 在求解所有不大于n的素数时,线性筛法(欧拉筛)都应当优先于埃氏筛法使用,因为线性筛法的时间复杂度为O(n),低于埃氏筛法的O(n log log n)。( ) C-L5 -- 困难 -- A21999 在单链表中,已知指针p指向要删除的结点(非尾结点),想在O(1)删除P,可行做法是用p-next覆盖p的值与next,然后删除p->next。( ) C-L5 -- 困难 -- A22000 假设函数gcd()函数能正确求两个正整数的最大公约数,则下面的lcm(a,b)函数能正确找到两个正整数a和b的最小公倍数。( )int lcm(int a, int b) { return a / gcd(a, b) b; } C-L5 -- 困难 -- A22001 数组和链表都是线性表。链表的优点是插⼊删除不需要移动元素,并且能随机查找。( ) C-L5 -- 困难 -- A22002 下⾯代码实现了对两个数组表⽰的正整数的⾼精度加法(数组低位在前),则横线上应填写( )。vector<int> add(vector<int> a, vector<int> b) { vector<int> c; int carry = 0; for (int i = 0; i < a.size() || i < b.size(); i++) { if (i < a.size()) carry … C-L5 -- 困难 -- A22003 给定有 n个任务,每个任务有截⽌时间和利润,每个任务耗时 1 个时间单位、必须在截⽌时间前完成,且每个时间槽最多做 1 个任务。为了在规定时间内获得最⼤利润,可以采⽤贪⼼策略,即按利润从⾼到低排序,尽量安排,则横线处应填写( )。struct Task { int deadline; // 截止时间 int profit; // 利润 }; void sortByProfit(vector<Ta… C-L5 -- 困难 -- A22004 下⾯给出了阶乘计算的两种⽅式。以下说法正确的是( )。int factorial1(int n) { if (n <= 1) return 1; return n * factorial1(n - 1); } int factorial2(int n) { int acc = 1; while (n > 1) { acc = acc * n; n = n - 1; } return acc; } C-L5 -- 困难 -- A22005 ⼩杨要把⼀根长度为 L 的⽊头切成 K 段,使得每段长度⼩于等于 x 。已知每切⼀⼑只能把⼀段⽊头分成两段,他⽤⼆分法找到满⾜条件的最⼩ x ( x 为正整数),则横线处应填写( )。// 判断: 在不超过 K 次切割内, 是否能让每段长度 <= x bool check(int L, int K, int x) { int cuts = (L - 1) / x; return cuts <= … C-L5 -- 困难 -- A22006 下⾯代码尝试在有序数组中查找第⼀个⼤于等于 x 的元素位置。如果没有⼤于等于 x 的元素,返回arr.size() 。以下说法正确的是( )。int lower_bound(vector<int>& arr, int x) { int l = 0, r = arr.size(); while(l < r) { int mid = l + (r - l) / 2; if(arr[mid] >= x… C-L5 -- 困难 --