关于CPU下面哪些说法是正确的?(B)。

A. CPU全称为中央控制器

B. CPU能直接运行机器语言

C. CPU最早是由Intel公司发明的

D.同样主题下,32位的CPU比16位的CPU运行速度快一倍

在字长为16位的系统环境下,一个16位带符号整数的进制补码为1111111111101011。

其对应的十进制整数应该是(D)。

A.20

B. -20

C. 21

D. -21

应用快速排序的分治思想,可以实现一个求第K大数的程序。算法的平均时间复杂度为(C)。

A. O(logn)

B. O(nlogn)

C. O(n)

D. O (1)

某算法计算时间表示为递推关系式:T(N)=N+2T(N/2),则该算法时间复杂度为(B)。

A. O (N2)(N​^2​)

B. O (NlogN)

C. O (N)

D. O (1)

假设给定有向无环图 G 中具有 n 个顶点和 m 条边,则对图 G 进行拓扑排序的时间 复杂度为(A)。

A.O(n+m)

B.O(n*m)

C.O(nlogn)

D.O(mlogn)

将数字1,2,3,4填入标号为1,2,3,4的四个方格里,每格填一个数,则每个方格的标号与所填数字均不相同的填法有(B)。

A、6种

B、9种

C、11种

D、23种

#include <bits/stdc++.h>
using namespace std;
bool is_prime(int x) {//判断质数
	for(int i=2;i<x;++i){
		if(x%i==0){
			return false;
		}
	}
	return true;
}
int main() {
	int n;
	cin>>n;
	for (int i=2,cnt=0;true;i++) {
		if (is_prime(i)){
			cnt++;//累加质数个数
		}
		if (cnt == n) {//第n个质数
			cout << i << endl;
			break;
		}
	}
	return 0;
}

判断题

将第4行”i<x”改成”i*i<x”代码运行结果不变。( x )

将第5行的”return false”改为”break”代码运行结果不变。( x )

程序15行的”break”改为”return 0”代码运行结果不变。( v )

程序在求第n个素数。( v )

将第11行的”true”去掉,不改变程序运行结果。( v )

选择题

输入5,输出(C)。

A、7

B、10

C、11

D、13

#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int p[N];
int n;
int main(){
	cin>>n;
	for(int i=2;i<=n;++i) {
		int t=i;
		for(int j=2;j*j<=i;j++) {
			while(t%j==0){
				p[j]++;
				t/= j;
			}
		}
		if(t>1){
			p[t]++;
		}
	}
	long long ans=1;
	for(int i=2;i<=n;++i) {
		ans=ans*(p[i]+1);
	}
	cout<<ans<<endl;
	return 0;
}

求n的阶乘的约数个数。

判断题

程序在求2-n中有多少个素数。( X )

程序输入5,输出10。( X ) 2^3* 3^1* 5^1

将11行的”while”改为”if”,程序运行结果不变。( X )

程序运行到12行是,j一定是素数。( V )

选择题

程序的时间复杂度为( D )。

A、O(n)

B、O(n2)(n​^2)

C、O(nlogn)

D、O(n(sprt(n)))

输入10,运行结束时,p数组所有元素的值的和为(C)。

A、10

B、12

C、15

D、20

输入10,运行结束时,输出为(D)。

A、200

B、225

C、250

D、270

一、(二分查找)输入n个升序数字序列和一个目标数字target,如果target在序列中,输出它所在的下标,下标从0开始,如果不在序列中,输出一个下标位置,表示将target插入在这里整个序列依然有序。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,target;
int nums[N];
int main(){
	scanf("%d%d",&n,&target);
	for (int i=0;i<n;++i){
		cin>>nums[i];
	}
	int l=0,h=①,mid=0;//l是左边界,h是右边界,mid是中间值。
	while(②){//判断是否有空间。
		mid=(l+h)/2;//求中间值。
		if(target==nums[mid]){//寻找target。
			printf("%d\\n",③);
			return 0;
		}else if(target>nums[mid]){
			④;//左边界缩小,+1的原因是,已知中间值mid不是target,那么就无需在判断一边中间值mid是否为target。
		}else{
			h=mid;//缩小右边界。
		}
	}
	printf("%d\\n",⑤);
	return 0;
}

①处应填 (A)

A、n

B、n - 1

C、n + 1

D、1

②处应填 (A)

A、l < h

B、l <= h

C、true

D、target != nums[mid]

③处应填 (B)

A、nums[mid]

B、mid

C、nums[l]

D、l

④处应填 (C)

A、l = mid

B、l = mid - 1

C、l = mid + 1

D、l = nums[mid]

⑤处应填 (A)

A、l

B、mid

C、r - 1

D、l + 1

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int arr[N];
int q[N],head=0,tail=0;
int n,k;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;++i){
		scanf("%d",&arr[i]);
	}
	for(int i=0;①;++i){
		if(②){
			head++;
		}
		while(head<tail&&③){
			tail--;
		}
		④;
		if(⑤){
			printf("%d",arr[q[head]]);
		}
	}
	return 0;
}

①处应填 (B)

A、i <= n

B、i < n

C、i <= k

D、i < k

②处应填 (A)

A、i >= k && q[head] == i - k

B、i > k && q[head] == i - k

C、i >= k && q[head] == arr[i-k]

D、i > k && q[head] == arr[i-k]

③处应填 (D)

A、arr[i] >= q[tail]

B、arr[i] > q[tail-1]

C、arr[i] >= arr[q[tail]]

D、arr[i] >= arr[q[tail-1]]

④处应填 (A)

A、q[tail++] = i

B、q[++tail] = i

C、q[tail++] = arr[i]

D、q[++tail] = arr[i]

⑤处应填 (C)

A、i >= k

B、i > k

C、i >= k - 1

D、i > tail