首页 > 21/4/4美团java开发笔试
头像
码不停Ti2001
编辑于 2021-04-16 17:59
+ 关注

21/4/4美团java开发笔试

21/4/4美团java开发笔试

五道编程题 分成两部分
第一部分4道
第二部分一道
状态不是很好 一直很懵 做题的时候

A 0.18

不重复子串
没找到规律 骗了0.18

#include<iostream>
#include<vector>
using namespace std;
int main(){
    string s;
    cin>>s;
    vector<vector<int>>num(s.size(),vector<int>(26,0));
    for(int i=0;i<s.size();i++){
        for(int j=0;i>0&&j<26;j++){
            num[i][j]=num[i-1][j]; 
        }
        num[i][s[i]-'a']++;
    }

//    for(int i=0;i<s.size();i++){
//        for(int j=0;j<26;j++){
//            cout<<num[i][j]<<" ";
//        }cout<<endl;
//    }
    return 0;
} 

B 0.45

球体 按 经度 维度 切块数

时间到了 之后1分钟 才想起来 平面 过中心 切的 规律
脑子蒙蒙的 这也没想出来

#include<iostream>
using namespace std;

int jj[180];
int ww[360];
int main(){
    int n;
    cin>>n;
    long long jing=0,wei=0;
    int a,b;
    for(int i=0;i<n;i++){
        cin>>a>>b;
        if(a==0){
            ww[b]=1;
        }
        if(a==1){
            jj[b%180]=1;
        }
    }
    for(int i=0;i<180;i++){
        if(jj[i]==1)jing++;
    //    if(ww[i]==1)wei++;
    }
    for(int i=0;i<360;i++){
        if(ww[i]==1)wei++;
    //    if(ww[i]==1)wei++;
    }
    cout<<(jing+1)*(wei+1);
    return 0;
}

C 1

#include<iostream>
#include<math.h>
//#include<sstream>
using namespace std;
//stringstream sm;
string ss(int t){
    if(t==1){
        return "1";
    }
    string s;
    string s1 = to_string(1);
    //sm<<1;
    //sm>>s1;
    string s2 = to_string(t) ;
    //sm<<t;
    //sm>>s2; 
    //cout<<s2<<endl;
    for(int i=2;i<=sqrt(t);i++){
        if(t%i==0){
            s1=s1+to_string(i);
            //sm<<t/i; 
            //string tt = ""+t/i;
            string tt = to_string(t/i);
            //sm>>tt;
            //cout<<tt<<endl;
            if(i*i!=t){
                s2=tt+s2;
            //cout<<s2<<endl;
            }

        }
    }
    s= s1+s2;
    //cout<<s<<endl;
    return s;
}
int contain(string s1,string s2){
    for(int i=0;i<s1.size();i++){
        for(int j=0;j<s2.size();j++){
            if(s1[i]==s2[j]){
                cout<<j<<" "<<s2.size() <<endl;
                if(j==s2.size()-1){
                    return 1;
                }
                continue;
            }else{
                break;
            }
        }
    }
    return 0;
}
int fun(int t,int k){
    string s = ss(t);
    string p = to_string(k);
    //sm<<k;
    //p = sm.str();
    //sm>>p;
    //cout<<s<<endl;
    string::size_type pos;
    pos = s.find(p);
    if(pos != s.npos){
        return 1;
    }else{
        return 0;
    }
    //return contain(s,p);
}
int main(){
    int n,k;
    cin>>n>>k;
    int count=0;
    for(int i=0;i<n;i++){
        int t;
        cin>>t;
        //cout<<fun(t,k)<<endl;
        count+=fun(t,k);
    }
    cout<<count;
    return 0;
}

D 0.09

给二维数组
从1蹦到k 算最小花费
写半天没过 样例

#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
struct node{
    int x;
    int y;
    int val=0;
};
int main(){
    int n,k;
    cin>>n>>k;
    vector<vector<int>>nums(n,vector<int>(n));
    vector<bool>bl(k+1);
    vector<vector<node>>value(k+1,vector<node>() );
    int t;
    int count=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>t;
            nums[i][j]=t;
            node nn;
            nn.x=i;
            nn.y=j;
            nn.val=0;
            value[t].push_back(nn);
            if(bl[t]==false){
                bl[t]=true;
                count++;
            }
        }
    }
        int ans = 99999;
    if(count!=k){
        cout<<"-1"<<endl;
        return 0;
    }else{
        for(int i=2;i<=k;i++){
            for(int j=0;j<value[i].size();j++){
                int min = 999999;
                node x = value[i][j];
                cout<<x.val<<" "<< i <<endl;
                for(int p=0;p<value[i-1].size();p++){
                    node y = value[i-1][p];
                    cout<<abs(x.x-y.x)<<" "<<abs(x.y-y.y)<<" "<<y.val<<endl;
                    int sum = abs(x.x-y.x)+abs(x.y-y.y)+y.val;
                    cout<<sum<<endl;
                    if(sum<min){
                        min = sum;
                    }
                }
                 value[i][j].val = min;
            }
            if(i==k){
                    for(int j=0;j<value[i].size();j++){
                        if(value[i][j].val<ans){
                            ans = value[i][j].val;
                        }
                    }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

E 1

发糖 必须从 0 开始连续拿 可以一个不拿 求最大值

#include<iostream>
using namespace std;
int main(){
    int a,b,t;
    cin>>a>>b;
    int suma=0;
    int sumb=0;
    int mmax=0,mmbx=0;
    for(int i=0;i<a;i++){
        cin>>t;
        suma+=t;
        if(suma>mmax){
            mmax=suma;
        }
//        if(suma<0){
//            suma=0;
//        }
    } 
    for(int i=0;i<b;i++){
        cin>>t;
        sumb+=t;
        if(sumb>mmbx){
            mmbx=sumb;
        }
//        if(sumb<0){
//            sumb=0;
//        }
    }
    if(mmax<0)mmax=0;
    if(mmbx<0)mmbx=0;
    cout<<mmax+mmbx<<endl;
    return 0;
}

全部评论

(2) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐