腾讯8.23笔试 后台

1 删除链表

#include
#include
#include
using namespace std;
int main()
{
    int n,k,m;
    scanf("%d %d",&n,&k);
    scanf("%d",&m);
    if(k != 1)
        printf("%d ",m);
    for(int i=2;i<=n;i++){
        scanf("%d",&m);
        if(i != k)
            printf("%d ",m);
    }
    return 0;
}

2 最小k字符串 :没写出来
3 两个数的拆分之和

// 思路678  分为99 和剩余的部分的  使得9最多就可以了,这样一定是最大的

#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
long long get_ws(long long n){
    long long k =0;
    while(n>0){
        n /=10;
        k = k*10 + 9;
    }
    return k/10;

}
int main(){
    long long res,k,m,j;
    int n;
    scanf("%d",&n);
    while(n--){
        scanf("%ld",&m);
        if(m < 19){
            printf("%d\n",m);
            continue;
        }
        k = get_ws(m);
        j = m - k;
        res = 0;
        while(k > 0){
            res += k % 10;
            k /= 10;
        }
        while(j > 0){
            res += j % 10;
            j /= 10;
        }

    }
    printf("%ld", res);
    return 0;
}

4 刷木板的问题 DP问题

#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
const int N =5050;
int a[N];
int solve(int l,int r){
    if(l > r)
        return 0;

    int k = l;
    for(int i = l; i <= r;i++){
        if(a[k] > a[i])
            k = i;

    }//找到最短的
    int sum = a[k];
    for(int i = l;i <= r; i++){//所有数都减去这个最小的数
        a[i] -= sum;
    }
    return min(r - l + 1, solve(l,k-1) + solve(k + 1,r) + sum);//在横着涂和竖着涂中取最小值

}

int main(){
    int n;
    scanf("%d",&n);
    for(int i = 0;i < n;i++){
        scanf("%d",&a[i]);
    }
    printf("%d\n",solve(0,n-1));

    return 0;
}

5 回文串问题

/*
f(i,j)表示 i到j 判断是不是会回文串
f(i,j) = min(f(i,j),f(i,k)+f(k+1,j))
*/

#include<iostream>
#include<cstring>

#include<stdio.h>
using namespace std;
int f[505][505];
string s;
bool is_huiwen(int l,int r){
    while(l <= r){
        if(s[l] != s[r]){
            break;

        }
        l++;
        r--;
    }
    if(l >= r){
        return true;
    }
    else{
        return false;
    }
}
int main(){
    int n;
    int l,r;

    cin>>s;
    n = s.size();
    for(int i=0 ;i <n;i++){
        for(int j =0; j<n;j++){
            f[i][j] = j - i + 1;
        }
        f[i][i] = 1;
    }
    for(int i=0 ;i <n;i++){
        for(int j =i+1; j<n;j++){
                if(is_huiwen(i,j))
                    f[i][j] = 1;
        }

    }
    for(int i=0 ;i < n;i++){
        for(int j =i+1; j<n;j++){
            for(int k = i; k<j;k++){
                if(f[i][k] + f[k+1][j] < f[i][j]){
                    f[i][j] = f[i][k] + f[k+1][j];
                }
            }
        }

    }
    scanf("%d",&n);
    while(n--){
        scanf("%d %d",&l,&r);
        l--;
        r--;//数组坐标是0开始,实际上的r和l是1开始
        if(l <= r){
            printf("%d\n",f[l][r]);
        }
        else{
            printf("%d\n",f[r][l]);
        }
    }
    return 0;
}
#笔试题目#
全部评论
楼主你好,请问你是实习、校招还是社招?岗位是什么?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞
送花
回复 分享
发布于 2020-08-24 10:31

相关推荐

黎明azzz:刘女士吓坏了
点赞 评论 收藏
分享
2 5 评论
分享
牛客网
牛客企业服务