选择题
1.字符串“ababacbab”和字符串“abcba”的最长公共子串是( )。
A. abcba B. cba C. abc D. ab E. bcba
子串要求连续,子序列可以不连续。
ans = C
6.处理器A每秒处理的指令数是处理器B的2倍。某一特定程序P分别编译为处理器A和处理器B的指令,编译结果处理器A的指令数是处理器B的4倍。已知程序P的算法时间复杂度为O(n2),如果处理器A执行程序P时能在一小时内完成的输入规模为n,则处理器B执行程序P时能在一小时内完成的输入规模为( )。
A. 4 * n B. 2 * n C. n D. n / 2 E. n / 4
这题的解决主要在对于变红的那一句话。这句话翻译成地球话,即程序P接收了规模为N的数据,处理器A需要处理的指令是B的4倍,已经考虑了P程序的复杂度。所以总体速度B是A的2倍。
ans = B
15、下列外设接口中可以通过无线连接的方式连接设备的是( )。
A. USB 2.0 高速版 B. 红外 C. 蓝牙 D. 串口 E. IEEE 802.11g 无线网卡
不要把是看成不是,不要把可以看成不可以就行了。
ans = BCE
20、历史上第一个高级语言:Fortran
看程序写结果
#include<iostream>
using namespace std;
int main() {
int a, b, c, p, q, r[3];
cin>>a>>b>>c;
p = a / b / c;
q = b – c + a + p;
r[0] = a * p / q * q;
r[1] = r[0] * (r[0] – 300);
if (3 * q – p % 3 <= r[0] && r[2] == r[2])
r[1] = r[r[0] / p % 2];
else
r[1] = q % p;
cout<<r[0]–r[1];
return 0;
}
输入:100 7 3
输出:
多膜几遍也不一定做得对的题目。考试的时候要保留草稿的历史记录,然后至少做3遍。
请不要把324/4算成82。
ans = -7452
include<iostream>
using namespace std;
int main(){
char str[60];
int len, i, j, chr[26];
char mmin = 'z';
cin>>str;
len = strlen(str);
for (i = len - 1; i >= 1; i--)
if (str[i - 1] < str[i]) break;
if (i == 0) {
cout<<"No result!"<<endl;
return 0;
}
for (j = 0; j < i - 1; j++) putchar(str[j]);
memset(chr, 0, sizeof(chr));
for (j = i; j < len; j++) {
if (str[j] > str[i - 1] && str[j] < mmin)
mmin = str[j];
chr[str[j] - 'a']++;
}
chr[mmin - 'a']--;
chr[str[i - 1] - 'a']++;
putchar(mmin);
for(i = 0; i < 26; i++)
for(j = 0; j < chr[i]; j++)
putchar(i + 'a');
putchar('\n');
return 0;
}
输入:zzyzcccbbbaaa
输出:
膜了好几遍终于检查出错误。
ans = zzzaaabbbcccy
#include <stdio.h>
void digit(long n,long m){
if(m>0){
printf("%2ld",n%10);
if(m>1){
digit(n/10,m/10);
printf("%2ld",n%10);
}
}
}
int main(){
long x,x2;
printf("Input a number:\n");
scanf("%ld",&x);
x2=1;
while(x2<x)
x2*=10;
x2/=10;
digit(x,x2);
printf("\n");
return 0;
}
答案不难得出,但是细节非常坑,那个printf(“Input a number:\n”),就算看见了也没有把他当成输出。
ans =
Input a number:
’ ‘6’ ‘2’ ‘5’ ‘4’ ‘3’ ‘7’ ‘9’ ‘7’ ‘3’ ‘4’ ‘5’ ‘2’ ‘6(’ '是空格 )
完型
木材加工
-
题目描述:
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定了的。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。
木头长度的单位是cm。原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。 -
输入:
第一行是两个正整数N和K(1 ≤ N ≤ 10000,1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目。
接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。 -
输出:
输出能够切割得到的小段的最大长度。如果连1cm长的小段都切不出来,输出”0”。 -
输入样例:
3 7
232
124
456 -
输出样例:
114 -
程序:
include<iostream>
using namespace std;
int n, k, len[10000];
int isok(int t) {
int num = 0, i;
for (i = 0; i < n; i++) {
if (num >= k) break;
num = ① ;
}
if ( ② ) return 1;
else return 0;
}
int main() {
int i, left, right, mid;
cin>>n>>k;
right = 0;
for (i = 0; i < n; i++) {
cin>>len[i];
if (right < len[i]) right = len[i];
}
right++;
③ ;
while ( ④ < right) {
mid = (left + right) / 2;
if ( ⑤ ) right = mid;
else left = mid;
}
cout<<left<<endl;
return 0;
}
简单的二分答案,但是他写的二分比较烦,边界很可疑。
首先看到right++,还有right = mid,可以看出他的二分区间是左闭右开的,即[left, right)。
所以边界条件是left+1 < right,最终答案是left。
而且应该不难看出如果边界写成left < right的话如果出现left = 2,right = 3且2可行的情况程序就会陷入死循环,不能把这种情况当做程序写错了来看。。。
N叉树
题目就不放了,只要不拼错 return 就行了(reutrn)
总结
这次考得还不错,主要是有时间重新做了数学题和写结果,检查出了好多错误。
考试的时候一定要规划好草稿纸,要能够快速找到以前的计算步骤和结果。
然后多膜。