前言
两个小时
19个单选题(涉及sql、计网、数据结构等内容
6个C++或java单选(涉及基本语法
3个编程题
第一题
20个6面骰子,每一面有一位数,问能组成的最大整数
刚开始考虑到数据大小,适用longlong型存储,仍只能过72%用例,测试发现按字符输出也可以过用例,故排序后按字符输出即可
#include <bits/stdc++.h>
using namespace std;
bool compare(int a, int b) {
return a > b;
}
int main() {
int count;
cin>>count;
vector<int> max_arr;
while (count--) {
int max_num = 0;
for(int i = 0 ; i <6;i++){
int num;
cin>>num;
max_num = max(num,max_num);
}
max_arr.push_back(max_num);
}
sort(max_arr.begin(),max_arr.end(),compare);
unsigned long long res=0;
for(int now_num:max_arr){
cout<<now_num;
}
return 0;
}
第二题
求[l,r]区间内有多少个正整数满足是a或b的倍数
比较简单,直接循环判断就好
#include <bits/stdc++.h>
using namespace std;
int get_res(int a,int b, int l,int r){
int res = 0;
for(int i = l;i<=r;i++){
if(i%a==0||i%b==0) res++;
}
return res;
}
int main() {
int count;
cin>>count;
vector<vector<int> > array;
while(count--){
vector<int> temp;
for(int i = 0 ; i <4 ; i ++){
int num;
cin>>num;
temp.push_back(num);
}
array.push_back(temp);
}
int len = array.size();
for(auto arr:array){
cout<<get_res(arr[0],arr[1],arr[2],arr[3])<<endl;
}
return 0;
}
第三题
-_-题目很复杂,看题看了半天,本身不难,直接上题目
判断给出的有序对组是否满足三个关系
自反关系:对于数据范围内的所有<a,a>均在给出的有序对中
对称关系:对于存在的有序对<a,b>,<b,a>也存在
传递关系:对于有序对<a,b><b,c>都存在时,<a,c>也存在
若上述三个关系同时满足,则输出yes,否则输出no
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,m;
cin>>n>>m;
set<vector<unsigned int>> my_set;
while (n--) {
unsigned int a,b;
cin>>a>>b;
// cout<<a<<b<<endl;
if(a>m||b>m){
cout<<"no";
return 0;
}
my_set.insert(vector<unsigned int>{a,b});
}
for(unsigned int i =1;i<=m;i++){
if(my_set.find(vector<unsigned int>{i,i}) == my_set.end()){
cout<<"no";
return 0;
}
}
map<int,set<vector<unsigned int>>::iterator> my_map;
for (auto iter = my_set.begin(); iter != my_set.end(); ++iter) {
if (my_map.find((*iter)[0]) == my_map.end()) {
my_map[(*iter)[0]] = iter;
}
if (my_set.find(vector<unsigned int>{(*iter)[1], (*iter)[0]}) == my_set.end()) {
cout << "no" << endl;
return 0;
}
}
vector<vector<unsigned int>> xunhuan_arr;
for(auto iter : my_set){
auto iter_begin = my_map.find(iter[0]);
while(iter_begin!=my_map.end()&&(*(iter_begin->second))[0]==iter[1]){
vector<unsigned int> temp = {iter[0],(*(iter_begin->second))[1]};
xunhuan_arr.push_back(temp);
iter_begin++;
}
}
for(auto arr:xunhuan_arr){
if (my_set.find(arr) == my_set.end()) {
cout << "no" << endl;
return 0;
}
}
cout<<"yes";
return 0;
}
整体不难,时间略紧张