#YHCSPJ0010. CSP-J模拟卷10
CSP-J模拟卷10
选择题
- (2分)以下逻辑表达式的值恒为真的是()。{{ select(1) }}
- P ∨ (¬P ∧ Q) ∨ (¬P ∧ ¬Q)
- Q ∨ (¬P ∧ Q) ∨ (P ∧ ¬Q)
- P ∨ Q ∨ (P ∧ ¬Q) ∨ (¬P ∧ Q)
- P ∨ ¬Q ∨ (P ∧ ¬Q) ∨ (¬P ∧ ¬Q)
- (2分)在8位二进制补码中,10101011表示的数是十进制下的()。{{ select(2) }}
- 43
- -85
- -43
- -84
- (2分)二进制数11.01在十进制下是()。{{ select(3) }}
- 3.25
- 4.125
- 6.25
- 11.125
- (2分)把64位非零浮点数强制转换成32位浮点数后,不可能()。{{ select(4) }}
- 大于原数
- 小于原数
- 等于原数
- 与原数符号相反
- (2分)提出“存储程序”的计算机工作原理的是()。{{ select(5) }}
- 克劳德·香农
- 戈登·摩尔
- 查尔斯·巴贝奇
- 冯·诺依曼
- (2分)开始时计算机处于小写输入状态,小老鼠按CapsLock、A、S、D的顺序循环按键,屏幕输出的第81个字符是()。{{ select(6) }}
- A
- S
- D
- a
- (2分)字符串“AAABBBCCC”共有()个不同的非空子串。{{ select(7) }}
- 3
- 12
- 36
- 45
- (2分)广度优先搜索时需要用到的数据结构是()。{{ select(8) }}
- 链表
- 队列
- 栈
- 散列表
- (2分)在搜索引擎中对关键词加双引号表示()。{{ select(9) }}
- 排除关键词
- 分解关键词
- 精确搜索
- 站内搜索
- (2分)将(2, 6, 10, 17)存储到0~10的哈希表中,哈希函数()不会产生冲突。{{ select(10) }}
- x mod 11
- x² mod 11
- (2x) mod 11
- ⌊sqrt(x)⌋ mod 11
- (2分)调用solve(7)的返回结果为()。{{ select(11) }}
solve(n) {
if n<=1 return 1
else if n>=5 return n*solve(n-2)
else return n*solve(n-1)
}
- 105
- 840
- 210
- 420
- (2分)在含N个不同数字的数组中同时找最大与最小数,最坏情况下至少需要()次比较。{{ select(12) }}
- ⌈3N/2⌉−2
- ⌊N/2⌋+2
- 2N−2
- 2N−4
- (2分)一家四口至少两人生日同月份的概率是()。{{ select(13) }}
- 1/12
- 1/144
- 41/96
- 3/4
- (2分)二叉树前序遍历为ABCDEFG,后序遍历为CBFEGDA,根结点左子树的结点个数可能是()。{{ select(14) }}
- 2
- 3
- 4
- 5
- (2分)2017年10月1日是星期日,1999年10月1日是()。{{ select(15) }}
- 星期三
- 星期日
- 星期五
- 星期二
阅读理解1(12分)
#include <cstdlib>
#include <iostream>
using namespace std;
char encoder[26] = {'C','S','P',0};
char decoder[26];
string st;
int main() {
int k = 0;
for (int i = 0; i < 26; ++i)
if (encoder[i] != 0) ++k;
for (char x = 'A'; x <= 'Z'; ++x) {
bool flag = true;
for (int i = 0; i < 26; ++i)
if (encoder[i] == x) {
flag = false;
break;
}
if (flag) {
encoder[k] = x;
++k;
}
}
for (int i = 0; i < 26; ++i)
decoder[encoder[i] - 'A'] = i + 'A';
cin >> st;
for (int i = 0; i < st.length(); ++i)
st[i] = decoder[st[i] - 'A'];
cout << st;
return 0;
}
第16题(1.5分)
输入字符串非大写字母可能导致数组越界。(){{ select(16) }}
- 正确
- 错误
第17题(1.5分)
输入非空字符串与输出一定不同。(){{ select(17) }}
- 正确
- 错误
第18题(1.5分)
第12行i<26改为i<16,运行结果不变。(){{ select(18) }}
- 正确
- 错误
第19题(1.5分)
第26行i<26改为i<16,运行结果不变。(){{ select(19) }}
- 正确
- 错误
第20题(3分)
输出为"ABC ABC ABC A",正确的是:{{ select(20) }}
- 输入含S和P
- 输入含S和B
- 输入含A和P
- 输入含A和B
第21题(3分)
输出为"CSPCSPCSPCSP",正确的是:{{ select(21) }}
- 输入含P和K
- 输入含J和R
- 输入含J和K
- 输入含P和R
阅读理解2(14分)
#include<cstdio>
#include<cstring>
using namespace std;
int n, m;
int f[101][101];
int F[101][101];
int main() {
scanf("%d%d", &n, &m);
memset(f, -1, sizeof(f));
for(int i = 1; i <= m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
f[u][v] = f[v][u] = w;
}
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(f[i][k] != -1 && f[k][j] != -1)
if(f[i][j] == -1 || f[i][j] > f[k][j] + f[i][k])
f[i][j] = f[i][k] + f[k][j];
int ans = 2147483647;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) {
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
F[x][y] = f[x][y];
F[i][j] = F[j][i] = 0;
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
if(F[x][y] == -1 || F[x][y] > F[x][i] + F[i][y])
F[x][y] = F[x][i] + F[i][y];
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
if(F[x][y] == -1 || F[x][y] > F[x][j] + F[j][y])
F[x][y] = F[x][j] + F[j][y];
int res = 0;
for(int x = 1; x <= n; x++)
for(int y = 1; y < x; y++)
res += F[x][y];
ans = min(res, ans);
}
printf("%d\n", ans);
return 0;
}
第22题(2分)
14-16行循环变量调为i、j、k,结果不变。(){{ select(22) }}
- 正确
- 错误
第23题(2分)
程序时间复杂度与m无关。(){{ select(23) }}
- 正确
- 错误
第24题(2分)
ans初始化为10^7可能无法得到正确结果。(){{ select(24) }}
- 正确
- 错误
第25题(2分)
27-30行与31-34行互换,结果不变。(){{ select(25) }}
- 正确
- 错误
第26题(3分)
输入4 5,边为1-2(3)、1-3(6)、2-3(4)、2-4(7)、3-4(2),输出:{{ select(26) }}
- 14
- 18
- 21
- 28
第27题(3分)
程序使用的算法是:{{ select(27) }}
- Floyd
- Dijkstra
- Prim
- Kruskal
阅读理解3(14分)
#include<iostream>
using namespace std;
const int V=100;
int n,m,ans,e[V][V];
bool visited[V];
void dfs(int x,int len) {
int i;
visited[x]=true;
if(len>ans) ans=len;
for(i=1;i<=n;i++)
if((!visited[i])&&(e[x][i]!=-1))
dfs(i,len+e[x][i]);
visited[x]=false;
}
int main() {
int i,j,a,b,c;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
e[i][j]=-1;
for(i=1;i<=m;i++) {
cin>>a>>b>>c;
e[a][b]=c;
e[b][a]=c;
}
for(i=1;i<=n;i++)
visited[i]=false;
ans=0;
for(i=1;i<=n;i++)
dfs(i,0);
cout<<ans<<endl;
return 0;
}
第28题(1.5分)
若m=n*(n-1)/2,20-22行初始化可省略。(){{ select(28) }}
- 正确
- 错误
第29题(1.5分)
第31行换成“for(i=n;i>=1;i--)”,结果不受影响。(){{ select(29) }}
- 正确
- 错误
第30题(3分)
输入4 2,1 2 1,3 4 1,输出:{{ select(30) }}
- 8
- 4
- 2
- 1
第31题(3分)
输入4 6,各边权1,输出:{{ select(31) }}
- 1
- 3
- 5
- 7
第32题(3分)
输入4 3,边为1-2(10)、2-3(20)、3-1(30),输出:{{ select(32) }}
- 30
- 60
- 90
- 120
第33题(3分)
输入4 6,边权10、20、30、40、50、60,输出:{{ select(33) }}
- 60
- 100
- 150
- 200
编程填空1(15分)
题目描述:封禁xxs
#include<cstdio>
using namespace std;
#define MAXN 300005
int n, ans=0, a[MAXN], in[MAXN]={0};
bool vis[MAXN]={0};
void dfs(int cur, int w) {
if(vis[cur])
return;
vis[cur]=true;
if(w==1) ans++;
①;
if(②)
dfs(a[cur], ③);
}
int main() {
scanf("%d", &n);
for(int i=1; i <=n; i++) {
scanf("%d", &a[i]);
in[a[i]]++;
}
for(int i=1; i <= n; i++)
if(!in[i]) ④;
for(int i=1; i<=n; i++)
if(⑤) dfs(i, 0);
printf("%d\n", ans);
return 0;
}
第34题(3分)①处应填(){{ select(34) }}
- a[cur]=cur
- in[a[cur]]=0
- in[a[cur]]--
- in[cur]--
第35题(3分)②处应填(){{ select(35) }}
- in[a[cur]]!=0 || w==1
- in[a[cur]]0 || w0
- in[a[cur]]!=0 || w==0
- in[a[cur]]0 || w1
第36题(3分)③处应填(){{ select(36) }}
- 0
- 1
- w
- 1-w
第37题(3分)④处应填(){{ select(37) }}
- dfs(i, 1)
- dfs(i, 0)
- dfs(a[i], 1)
- dfs(a[i], 0)
第38题(3分)⑤处应填(){{ select(38) }}
- !in[i]
- in[i]
- !vis[i]
- vis[i]
编程填空2(15分)
题目描述:二叉查找树
#include <iostream>
using namespace std;
const int SIZE = 100;
const int INFINITE = 1000000;
struct node {
int left_child, right_child, value;
}; node a[SIZE];
int is_bst(int root, int lower_bound, int upper_bound) {
int cur;
if (root == 0)
return(1);
cur = a[root].value;
if ((cur > lower_bound) && (①) && (is_bst(a[root].left_child, lower_bound, cur) == 1) && (is_bst(②, ③, ④) == 1))
return(1);
return(0);
}
int main() {
int i, n; cin >> n;
for (i = 1; i <= n; i++)
cin >> a[i].value >> a[i].left_child >> a[i].right_child;
cout << is_bst(⑤, -INFINITE, INFINITE) << endl;
return(0);
}
第39题(3分)①处应填(){{ select(39) }}
- cur < upper_bound
- cur > upper_bound
- cur == upper_bound
- cur != upper_bound
第40题(3分)②处应填(){{ select(40) }}
- a[root].left_child
- a[root].right_child
- lower_bound
- upper_bound
第41题(3分)③处应填(){{ select(41) }}
- cur
- lower_bound
- upper_bound
- root
第42题(3分)④处应填(){{ select(42) }}
- cur
- lower_bound
- upper_bound
- root
第43题(3分)⑤处应填(){{ select(43) }}
- 0
- 1
- n
- -1