秋招笔试|科大讯飞飞凡计划0706

前言

两个小时
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;
}

整体不难,时间略紧张

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值