关于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)
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)
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