重点题:
第一章:小测-2、4、7
第二章:小测-3 & 编程-2、3
第一章 概论
part 1: 小测验
答案:
1.C你选对了
解析: 注意i从1到9全部遍历,j分别从2,4,6,...开始遍历到9,当i大于5时,循环不再对m进行操作.
i=1结束循环时,m=8;
i=2结束循环时,m=8+6=14;
i=3结束循环时,m=14+4=18;
i=4结束循环时,m=18+2=20;
解析: 计算复杂度时,系数是可以忽略的。(5)和(1)是指数级复杂度,大于(2)(3)(4)多项式级复杂度,区别在于指数中是否有n。而(5)的指数里还有指数级复杂度的表达式,(1)的指数是n,为多项式级,故(5)比(1)复杂。对于(2)(3)(4),(2)的指数最大,为2.5,(4)的指数居中,为2,(3)的指数最小,解释如下:logn的任意实数次方的复杂度都小于n,故(logn)^4比n复杂度低,故n*(logn)^4比n*n复杂度低,故(4)比(3)复杂,故答案为(5)(1)(2)(4)(3)
part 2: 编程题
(太简单了,略)
第二章 线性表
part 1: 小测验
答案
1.B、C、D你选对了
解析: 已知结点后插入,不需要移动其他结点位置,所以为O(1) 2. 先要查找到值为x的结点,需要O(n),再插入,不需要移动其他结点位置,需要O(1),总共需要O(n)+O(1)=O(n)
解析: 循环链表尾结点的next会指向头结点
part 2: 编程题
1.字符串插入


#include <iostream> #include <cstring> using namespace std; int main(){ char str[200010], substr[100010]; int p=0, max_ascii=0, l1, l2; cin >> str >> substr; l1 = (int)strlen(str); l2 = (int)strlen(substr); for(int i=0; i<l1; ++i) if(str[i] > max_ascii){ max_ascii = str[i]; p = i; } for(int i=l1; i>p; --i) str[i+l2] = str[i]; for(int i=p+1, j=0; j<l2; ++i, ++j) str[i] = substr[j]; cout << str << endl; return 0; }
2.大整数乘法


#include <iostream> #include <cstring> using namespace std; int main(){ int a[250]={0}, b[250]={0}, c[500]={0}, la,lb; string na, nb; //输入并倒序储存a和b cin >> na >> nb; la = (int)na.length(); lb = (int)nb.length(); for(int i=0; i<la; ++i) a[i] = na[la-i-1] - '0'; for(int i=0; i<lb; ++i) b[i] = nb[lb-i-1] -'0'; for(int i=0; i<la; ++i)//a的从低到高第i位 for(int j=0; j<lb; ++j)//b的从低到高第j位 c[i+j] += a[i] * b[j]; for(int i=0; i<la+lb; ++i){//进位 c[i+1] += c[i] / 10; c[i] %= 10; } int rest = c[la+lb]/10, lc = la+lb; while(rest){//进位 c[lc] %= 10; c[++lc] = rest; rest = c[lc]/10; } for(; c[lc]==0 && lc; --lc);//找到最高的非零位 for(int i=lc; i>=0; --i) cout << c[i]; return 0; }
3.约瑟夫问题


#include <iostream> #include <cstring> using namespace std; int main(){ bool monkey[300]={0}; int n, m, cnt=0, cur=1, rest; cin >> n >> m; rest = n; for(int i=1; i<=n; ++i) monkey[i] = 1; while(rest > 1){ ++cnt;//当前猴子报数 if(cnt == m){//出圈,重新开始一轮报数 --rest; monkey[cur] = 0; cnt = 0; //cout << cur << endl; } ++cur;//找到下一只报数的猴子 while(monkey[cur] == 0){ ++cur; if(cur > n) cur = 1; } } cout << cur << endl; return 0; }
所有评论(0)