2021中兴软件类笔试试卷B-2
单选14题,多选6题,编程2题,满分100分,时间100分钟
单选题:考试内容:数据结构与算法,计算机网络,各种编程语言基础知识,数据库SQL语言,测试分析等,很杂乱,基本上都没见过。
编程题:
1-求最长子区间:长度为n的数组a,求1<=l<=r<=n,一段子区间的和除以这段区间长度的值最大。
分析得到:当取最大值的得到的结果最大。这是一个取巧的方法。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int>input(n);
for (int i = 0; i<n; i++)
cin >> input[i];
//排序,取出最大值
sort(input.begin(), input.end());
cout << input[n - 1] << endl;
system("pause");
return 0;
}
//题目描述:
//输入:一个数字T,作为总共要输入的行数;接下来输入T行:每行
// 包括一个字符串s,进制数l和r,其中s只包括0-9和A-Z之间的字符,l<r
//输出:每行一个数字,是字符串转换为10进制后的数的和:sl+sl+1+…+sr-1+sr为奇数,输出1;为偶数输出0;
#include<iostream>
#include<string>
#include<vector>
using namespace std;
inline int transform(char c) {
//0-9,10=A,11=B,..,35=Z转换为数字
if (c <= '9' && c>='0')
return c - '0';
else
return c - 'A' + 10;
}
int main() {
int T;
cin >> T;
while (T--) {//输入T行
string s;
int l, r;
long long int sum = 0;
int n = s.size();
cin >> s >> l >> r;
for (int j = l; j <= r; ++j) {
long long int temp = 0;
for (int i = 0; i < s.size(); ++i) {//0-9,10=A,11=B,..,35=Z转换为数字
temp *= j;
temp += transform(s[i]);//将L-R进制数转换为10进制数
}
sum += temp;//l-r的所有进制数转换为10进制数后求和
}
if (sum % 2 == 0)
cout << false << endl;
else
cout << true << endl;
}
return 0;
}
//代码可以运行,但是只能输入一行得一行结果。大佬们看看怎么使得输入n行,得n行结果.