好未来笔试 AC代码

求第四和第六题AC代码

第一题 拆数字串
这道题应该动态规划的,我的的代码有问题
这道题当时侥幸AC,应该只是过了牛客的测试用例,对于712这种情况应该输出1,我的代码确输出0
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
    vector<int> arr;
    string str;
    int res=0, sum=0;
    cin >> str;
    for(int i=0; i<str.size(); i++){
        if(str[i]<'0' || str[i]>'9')
            return 0;
        int temp = str[i]-'0';
        arr.push_back(temp);
    }

    for(int i=0; i<arr.size(); i++){
        sum += arr[i];
        if(arr[i]%3 == 0){
            res++;
            sum = 0;
            continue;
        }
        if(sum%3 == 0){
            res++;
            sum = 0;
        }
    }
    cout << res << endl;
    return 0;
}

第二题 加与或的关系

#include <iostream>
using namespace std;
void fun(long long x, long long k){
    long long y = 0, n =1;
    while(k > 0){
        if(x%2 != 0){
            while(x%2 != 0){
                n = n*2; 
                x = x/2;
            }
        }
        if(k%2 != 0)
            y = y+n;
        n = n*2;
        x = x/2;
        k = k/2;
    }
    cout << y;
}
int main() {
    long long t, x, k;
    cin >> t;
    for(int i=0; i<t; i++){
        cin>>x>>k;
        fun(x, k);
        if(i!=t-1)
            cout<<endl;
    }
    return 0;
}

第三题 排列组合

#include<cstdio>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> arr;
int main()
{
    int a[11];
    for(int i=0; i<10; i++)
        scanf("%d",&a[i]);
    for(int i=0; i<(1<<10); i++)
    {
        int f=0;
        for(int j=0; j<10; j++)
            if(!((i&(1<<j)))&&a[j])
            {
                f=1;
                break;
            }
        if(f)
            continue;
        string str="";
        for(int j=0; j<10; j++)
            if(i&(1<<j))
                str.push_back('0' + j);
        arr.push_back(str);
    }
    sort(arr.begin(),arr.end());
    for(int i=0; i<arr.size(); i++)
        cout<<arr[i]<<endl;
    return 0;
}

第五题 最大上升子序列和

#include<stdio.h>
using namespace std;
int arr[100];
int maxSumIS( int arr[], int n )
{
    int i, j, max = 0;
    int dp[n];
    for ( i = 0; i < n; i++ )
        dp[i] = arr[i];
    for ( i = 1; i < n; i++ )
        for ( j = 0; j < i; j++ )
            if ( arr[i] > arr[j] && dp[i] < dp[j] + arr[i])
                dp[i] = dp[j] + arr[i];
    for ( i = 0; i < n; i++ )
        if ( max < dp[i] )
            max = dp[i];

    return max;
}
int main()
{
    int temp=0, i=0;
    while(~scanf("%d", &temp)){
        arr[i] = temp;
        i++;
    }
    printf("%d\n", maxSumIS(arr, 100));
    return 0;
}
#好未来##题解##笔试题目##秋招#
全部评论
大佬,第二题求解答
点赞 回复 分享
发布于 2018-08-28 21:53
有人AC第四题和第六题吗  求一下代码
点赞 回复 分享
发布于 2018-08-28 21:29
第四题好像是这个   e = sum/(n-m) https://www.nowcoder.com/discuss/100048?type=0&order=0&pos=6&page=0
点赞 回复 分享
发布于 2018-08-28 21:33
大佬可以帮我看下我第二题代码吗? #include<iostream> using namespace std; int book[64]; int main() {     int t;     while (cin >> t)     {         for (int p = 0; p<t; ++p)         {             long long x, k;             cin >> x >> k;             for (long i = 0; i < 64; ++i)             {                 long long u = 1;                 if (!(x&((u << i))))                     book[i] = 1;             }             long long result = 0;             for (int i = 0; i < 64; ++i)             {                 long long u = 1;                 if ((k&(u << i)))                 {                     int j = 0;                     int q = 0;                     while (j < 64)                     {                         if (book[j] == 1)                             q++;                         if (q == (i + 1))                             break;                         j++;                     }                     long long v = 1;                     result |= (v << j);                 }             }             cout << result << endl;         }     } }
点赞 回复 分享
发布于 2018-08-28 21:38
第二题给讲一下啊
点赞 回复 分享
发布于 2018-08-28 22:07
第五题  我也是动态规划  怎么只有57%
点赞 回复 分享
发布于 2018-08-28 22:26
第一题: 大佬看一下哪里错了 public static int dfs(String s, int current) {         if (current == s.length()) {             return 0;         }         int max = 0;         for (int i = current; i < s.length(); i++) {             int a = Integer.parseInt(s.substring(current, i + 1));             if (a % 3 == 0) {                 max = Math.max(max, dfs(s, i + 1) + 1);             } else {                 max = Math.max(max, dfs(s, i + 1));             }         }         return max;     }
点赞 回复 分享
发布于 2018-08-29 09:09
第五题最后那个for循环去掉也可以吧,加在第二个里
点赞 回复 分享
发布于 2018-08-29 09:10
第一题答案思路不对吧,比如输入712,答案应该是1,输出0
点赞 回复 分享
发布于 2018-08-29 10:30
第一题 3712你觉得你的代码能测试过?
点赞 回复 分享
发布于 2018-08-29 10:36

相关推荐

不愿透露姓名的神秘牛友
今天 10:52
点赞 评论 收藏
分享
点赞 32 评论
分享
牛客网
牛客企业服务