当前位置: 首页 > 面试经验 >

阿里0829C++笔试

优质
小牛编辑
111浏览
2023-03-28

阿里0829C++笔试

// 第一题 画里
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;


void f(int n){
    
    map<int,vector<vector<int>>> m;
    m.insert({1,{{0,11,0}}});
    m.insert({2,{{0,2,0},{2,7,1},{9,2,0}}});
    m.insert({3,{{0,2,0},{2,1,1},{3,2,0},{5,1,1},{6,2,0},{8,1,1},{9,2,0}}});
    m.insert({4,{{0,2,0},{2,7,1},{9,2,0}}});
    m.insert({5,{{0,2,0},{2,1,1},{3,2,0},{5,1,1},{6,2,0},{8,1,1},{9,2,0}}});
    m.insert({6,{{0,2,0},{2,7,1},{9,2,0}}});
    m.insert({7,{{0,5,0},{5,1,1},{6,5,0}}});
    m.insert({8,{{0,2,0},{2,7,1},{9,2,0}}});
    m.insert({9,{{0,5,0},{5,1,1},{6,5,0}}});
    m.insert({10,{{0,1,0},{1,9,1},{10,1,0}}});
    m.insert({11,{{0,11,0}}});
    for(int i=1;i<=11;i++){
        vector<vector<int>> records = m[i];
        for(int j=0;j<n;j++){
            for(vector<int> &v:records){
                for(int i=0;i<v[1]*n;i++){
                    if(v[2]==0){
                        cout<<".";
                    }else{
                        cout<<"*";
                    }
                }
            }
            cout<<endl;
        }
    }
}

int main(){
    
    int n = 0;
    cin >> n;
    
    f(n);
    return 0;
}




// 第二题 点击计算最大得分
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>

using namespace std;

long dfs(vector<string> &boards,int i,int j,int n,int m,char color,vector<vector<bool>> &visited,vector<vector<int>> &directions){
    if(i<0||i>=n||j<0||j>=m){
        return 0;
    }
    if(boards[i][j]!=color){
        return 0;
    }
    if(visited[i][j]){
        return 0;
    }
    visited[i][j] = true;
    long long score = 0;
    if(color=='r'){
        score = 1;
    }else if(color=='b'){
        score = 2;
    }else if(color=='g'){
        score =3;
    }else if(color=='p'){
        score = 5;
    }
    for(auto direction:directions){
        int next_i = i + direction[0];
        int next_j = j + direction[1];
        score+= dfs(boards,next_i,next_j,n,m,color,visited,directions);
    }
    
    return score;
    
}

int main(){
    int n=0,m=0,k=0;
    cin>>n>>m>>k;
    vector<string> boards(n);
    string input;
    int index = 0;
    while(cin>>input){
        boards[index++] = input;
    }
    
    vector<vector<bool>> visited(n,vector<bool>(m,false));
    vector<vector<int>> directions={
        {-1,0},{1,0},{0,-1},{0,1}
    };
    vector<long long> scores;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(!visited[i][j]){
                long long score = dfs(boards,i,j,n,m,boards[i][j],visited,directions);
                scores.push_back(score);
            }
        }
    }
    
    sort(scores.begin(),scores.end());
    index = scores.size() - 1;
    long long ans = 0;
    
    while(k>0&&index>=0){
        ans+=scores[index--];
        k--;
    }
    
    cout<<ans;
    return 0;
    
}




// 第三题  2022关系匹配数量
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<unordered_map>
using namespace std;





int main(){
    int n=0,m=0;
    cin>>n>>m;
    //vector<int> a(n,0);
    //vector<int> b(m,0);
    int i = 0;
    int num = 0;
    unordered_map<int, long> a_maps,b_maps;
    int tmp = 0;
    while(i++<n){
        cin>>num;
        //a[i++]=num;
        tmp=0;
        if(num%337==0){
            tmp+=100;
        }
        if(num%3==0){
            tmp+=10;
        }
        if(num%2==0){
            tmp+=1;
        }
        ++a_maps[tmp];
    }
    i=0;
    while(i++<m){
        cin>>num;
        //b[i++]=num;
        tmp=0;
        if(num%337==0){
            tmp+=100;
        }
        if(num%3==0){
            tmp+=10;
        }
        if(num%2==0){
            tmp+=1;
        }
        ++b_maps[tmp];
        //cout<<"tmp="<<tmp<<",num="<<num<<endl;
    }
    
    long long ans = 0;
    // 111 110 101 100 11 10 1 0
    if(a_maps.count(111)){
        ans+=a_maps[111]*m;
    }
    //cout<<ans<<endl;
    if(a_maps.count(110)){
        ans+=a_maps[110]*(b_maps[111]+b_maps[101]+b_maps[11]+b_maps[1]);
    }
    //cout<<ans<<endl;
    if(a_maps.count(101)){
        ans+=a_maps[101]*(b_maps[111]+b_maps[110]+b_maps[11]+b_maps[10]);
    }
    //cout<<ans<<endl;
    if(a_maps.count(100)){
        ans+=a_maps[100]*(b_maps[111]+b_maps[11]);
    }
    //cout<<ans<<endl;
    if(a_maps.count(11)){
        ans+=a_maps[11]*(b_maps[111]+b_maps[110]+b_maps[101]+b_maps[100]);
    }
    //cout<<ans<<endl;
    if(a_maps.count(10)){
        ans+=a_maps[10]*(b_maps[111]+b_maps[101]);
    }
    //cout<<ans<<endl;
    if(a_maps.count(1)){
        ans+=a_maps[1]*(b_maps[111]+b_maps[110]);
    }
    if(a_maps.count(0)){
        ans+=a_maps[0]*(b_maps[111]);
    }
    
    //cout<<","<<b_maps[111]<<","<<b_maps[110]<<endl;
    
    
    cout<<ans;
    
    
    return 0;
}



#阿里笔试#
 类似资料: