2019秋招好未来笔试答案(含题目) 点赞有offer

第四题概率不会,大佬给我发下答案补上 ,要看题目的可以点这个链接
#include <bits/stdc++.h>

using namespace std;

int main() {
    //freopen("../in.txt", "r", stdin);
    string str;
    cin >> str;
    int i, len = str.length(), m, number, ans = 0, c1, c2;
    for (i = 0, m = 0, c1 = 0, c2 = 0; i < len; i++) {
        number = str[i] - '0';
        //遇到3的情况直接加1
        if (number % 3 == 0) {
            ans++;
            m = 0, c1 = 0, c2 = 0;
            continue;
        }
        m += number;
        if (number % 3 == 1)
            c1++;
        else
            c2++;
        //判断能不能有一个组合
        if ((m > 0 && m % 3 == 0) || (c1 > 0 && c2 > 0)) {
            ans++;
            m = 0, c1 = 0, c2 = 0;
        }
    }
    cout << ans << endl;
}
2.这题其实描述是有点不完整的,按照题目的意思,得到的ans可能会爆long long,但是我这么交上去过了
#include <bits/stdc++.h>

using namespace std;
#define ll long long

int main() {
    //freopen("../in.txt", "r", stdin);
    ll t,x,k,ans,i,j,a,lenX,lenK,lenA;
    int posX[160],posK[160],posA[160];
    cin>>t;
    while (t--){
        memset(posX,0, sizeof(posX));
        cin>>x>>k;
        i=0,ans=0;
        while (x>0){
            posX[i++]=x&1;
            x=x>>1;
        }
        lenX=i;

        i=0;
        while (k>0){
            posK[i++]=k&1;
            k=k>>1;
        }
        lenK=i;

        for(i=0,j=0,a=0;j<lenK;i++){
            if(posX[i]==0)
                posA[a++]=posK[j++];
            else
                posA[a++]=0;
        }
        lenA=a;
        for(i=lenA-1;i>=0;i--){
            ans=ans<<1;
            ans=ans|posA[i];
        }
        cout<<ans<<endl;
    }
}

3.

#include <bits/stdc++.h>

using namespace std;
#define ll long long

int a[10]={0,1,2,3,4,5,6,7,8,9};
int pos[10],i,p[10];
set<string> v;

void Print(){
    string s="";
    for(i=0;i<10;i++){
        if(p[i]==1)
            s+=a[i]+'0';
//            cout<<a[i];
    }
    v.insert(s);
    //    cout<<s<<endl;
}

int main() {
//    freopen("../in.txt", "r", stdin);
    for(i=0;i<10;i++)
        cin>>pos[i];

    int add = 0,tmp;
    while (1){
        int flag=0;
        for(i=9;i>=0;i--){
            if(p[i]==0){
                flag=1;
            }
        }
        if(flag==0){
            break;
        }
        //打印
        tmp=add++;
        for(i=9;i>=0;i--){
            p[i]=pos[i];
            if(pos[i]==0){
                p[i]=tmp&1;
                tmp=tmp/2;
            }
        }
        Print();
    }
    set<string>::iterator it;
    for(it=v.begin();it!=v.end();it++){
        cout<<*it<<endl;
    }
}

4.

5.

#include <bits/stdc++.h>

using namespace std;
#define ll long long

int n, a[1005], Max;
int dp[1005];//dp[i]为前i个数的最大升序子段和
const int inf = 99999;

int main() {
    //freopen("../in.txt", "r", stdin);
    int i = 1, j, temp;
    while (cin >> a[i++]);
    n = i;
    memset(dp, 0, sizeof(dp));
    for (i = 1; i <= n; i++) {
        temp = -inf;
        for (j = 0; j < i; j++) {
            if (a[j] < a[i])
                temp = max(temp, dp[j]);//如果i前没有小于它的,temp就为0
        }                           //且dp[i]也为它本身
        dp[i] = temp + a[i];
    }
    temp = -inf;
    for (i = 1; i <= n; i++)
        if (dp[i] > temp)
            temp = dp[i];
    cout << temp << endl;
}
6.
#include <bits/stdc++.h>

using namespace std;
#define ll long long

void string_replace(string &strBig, const string &strsrc, const string &strdst) {
    int pos = 0;
    int srclen = strsrc.size();
    int dstlen = strdst.size();

    while ((pos = strBig.find(strsrc, pos)) != -1) {
        strBig.replace(pos, srclen, strdst);
        pos += dstlen;
    }
}

int main() {
//    freopen("../in.txt", "r", stdin);
    string str, s, p;
    getline(cin, str);
    cin >> s >> p;
    string_replace(str, s, p);
    cout << str << endl;
}
#好未来##笔经#
全部评论
大佬们点个赞啊。感谢!!!!
点赞 回复
分享
发布于 2018-08-29 12:10
期望直接等于sum/(n-m)
点赞 回复
分享
发布于 2018-08-28 21:16
联想
校招火热招聘中
官网直投
第四题,直接求和除以(n-m)过了。。。
点赞 回复
分享
发布于 2018-08-28 21:18
2居然不需要考虑大数??? 不过大数也AC了。。。主办方真的是。。神奇 #include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #include <string> #include <math.h> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <cmath> #pragma warning(disable:4996) #define Zero(a) memset(a, 0, sizeof(a)) #define Neg(a)  memset(a, -1, sizeof(a)) #define All(a) a.begin(), a.end() #define PB push_back #define repf(i,a,b) for(i = a;i <= b; i++) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define root 1,n,1 #define ld rt << 1 #define rd rt << 1 | 1 #define ll long long #define MAXN 100100 #define INF 6666666 #define mod 1000000007 #define ll long long #define sqrtt(x) (ll)(x)*(x) #define dist(x1,y1,x2,y2) (sqrtt(x1-x2)+sqrtt(y1-y2)) using namespace std; ll x, y; ll k; int T; int yess[130]; vector<int>rec; string Sum(string s1, string s2) {     if (s1.length() < s2.length())     {         string temp = s1;         s1 = s2;         s2 = temp;     }     int i, j;     for (i = s1.length() - 1, j = s2.length() - 1; i >= 0; i--, j--)     {         s1[i] = char(s1[i] + (j >= 0 ? s2[j] - '0' : 0));           if (s1[i] - '0' >= 10)         {             s1[i] = char((s1[i] - '0') % 10 + '0');             if (i) s1[i - 1]++;             else s1 = '1' + s1;         }     }     return s1; } ll multt(ll m, ll n) {     ll ans = 1;     for (int i = 0; i < n; ++i)         ans *= m;     return ans; } string Multiply(string s, int x)  //大数乘以整形数 {     reverse(s.begin(), s.end());     int cmp = 0;     for (int i = 0; i < s.size(); i++)     {         cmp = (s[i] - '0')*x + cmp;         s[i] = (cmp % 10 + '0');         cmp /= 10;     }     while (cmp)     {         s += (cmp % 10 + '0');         cmp /= 10;     }     reverse(s.begin(), s.end());     return s; } struct node {     int val;     int pos; }; vector<node>nd; int main() {     while (cin >> T) {         while (T--) {             cin >> x >> k;             rec.clear();             for (int i = 0; i < 130; ++i)                 yess[i] = 1;             ll tt = 0;             int stp = 0;             while (tt <= x) {                 if (multt(2, stp) & x) {                     yess[stp] = 0;                 }                 tt += multt(2, stp);                 stp++;             }             nd.clear();             int cnt = 0;             for (int i = 0; i < 130; ++i) {                 node kk;                 if (yess[i] == 1) {                     kk.pos = 1;                     kk.val = i;                     nd.push_back(kk);                 }             }             //cout << nd.size() << endl;             stp = 0;             tt = 0;             while (stp < nd.size()) {                 if ((multt(2, stp) & k) && tt <= k) {                     nd[stp].pos = 1;                 }                 else {                     nd[stp].pos = 0;                 }                 tt += multt(2, stp);                 stp++;             }             vector<node>ndd;             for (int i = 0; i < nd.size(); ++i) {                 if (nd[i].pos == 1)                     ndd.push_back(nd[i]);             }             string ans = "0";             for (int i = 0; i < ndd.size(); ++i) {                 string anss = "1";                 for (int j = 0; j < ndd[i].val; ++j)                     anss = Multiply(anss, 2);                 //cout << anss << endl;                 ans = Sum(ans, anss);             }             cout << ans << endl;         }     }     return 0; }
点赞 回复
分享
发布于 2018-08-28 21:19
欢迎参与题解活动呀https://www.nowcoder.com/discuss/96308?type=0&order=0&pos=4&page=1
点赞 回复
分享
发布于 2018-08-28 21:22
第一题dp不知道为什么只过了80%+...
点赞 回复
分享
发布于 2018-08-28 21:28
最后一题可以直接用string吗???
点赞 回复
分享
发布于 2018-08-28 21:31
第二题:一直运行超时,在本地编辑器都能通过  #include<iostream> using namespace std; int main() {     int t;     cin >> t;     long long num[100][2];     int ans[100];     for (int i = 0; i < t; i++)     {         cin >> num[i][0] >> num[i][1];         for (int j = 1;; j++)         {             if (num[i][0] + j == (num[i][0] | j))                 num[i][1]--;             if (num[i][1] == 0)             {                 ans[i] = j;                 break;             }         }     }     for (int i = 0; i < t; i++)     {         cout << ans[i] << endl;     }     return 0; } 
点赞 回复
分享
发布于 2018-08-28 21:36
https://www.nowcoder.com/discuss/100048 第四题
点赞 回复
分享
发布于 2018-08-28 21:37
好未来的体型只是几个大题?
点赞 回复
分享
发布于 2018-08-28 21:38
第一题: #include <iostream>  using namespace std;   int main()  {     long long n;     cin>>n;     int num[100];     int a=0;     while(n)     {         num[a]=n%10;         a++;         n=n/10;     }     int ans=0;     long long temp=0;     for(int j=a-1;j>=0;j--)     {         if(num[j]%3==0&&temp==0)         {             ans++;         }         else         {             temp+=num[j];             if(temp%3==0)             {                 ans++;                 temp=0;             }         }     }     cout << ans << endl;     return 0; } 求问:为什么只能通过66.17%?系统还不给通不过的测试用例
点赞 回复
分享
发布于 2018-08-28 21:49
姜逼哥666.。。带我呀
点赞 回复
分享
发布于 2018-08-28 22:08
第一题: #include <iostream> #include <string> using namespace std; int help(string & s) {     int tmp=0,ans=0,judge=0,count=0;     for (auto x : s) {         if (x == '3' || x == '0') {             ans++;             judge++;             tmp = 0;             count = 0;             continue;         }         else {             tmp = tmp * 10 + x - '0';             count++;         }         if (tmp % 3 == 0) {             judge+=count;//使用to_string(tmp).size()也可以,代码简洁但是耗时增加。             count = 0;             ans++, tmp = 0;         }     }     return judge==s.size()?ans:0; } int main(void) {     string nums;     while (cin >> nums) {         cout << help(nums) << endl;     } }
点赞 回复
分享
发布于 2018-08-29 11:07
参考了一下第三题,嘻嘻
点赞 回复
分享
发布于 2018-08-29 12:15
该网页无法正常运作cugxuan.coding.me 未发送任何数据。 ERR_EMPTY_RESPONSE
点赞 回复
分享
发布于 2021-08-07 17:53

相关推荐

点赞 评论 收藏
转发
29 收藏 评论
分享
牛客网
牛客企业服务