腾讯笔试题目

320 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

笔试题1

小Q定义了一种数列称为翻转数列: 给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。 例如n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8. 而n = 4, m = 1, 数列就是: -1, +2, -3, + 4. 小Q现在希望你能帮他算算前n项和为多少。

输入描述:

输入包括两个整数n和m(2 <= n <= 109, 1 <= m), 并且满足n能被2m整除。

输出描述:

输出一个整数, 表示前n项和。

笔试题1-代码:

import java.util.Scanner;

public class Test_1 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        long s = System.nanoTime();
        if (n % 2*m !=0){
            return;
        }else  if (m < 0){
            return;
        }else if (n < 2 && n > Math.pow(10,9)){
            return;
        }
        System.out.println(n*m/2);
        long e = System.nanoTime();
        System.out.println((e-s)/1000000 + "ms");
    }

}

笔试题2

牛牛和羊羊正在玩一个纸牌游戏。这个游戏一共有n张纸牌, 第i张纸牌上写着数字ai。 牛牛和羊羊轮流抽牌, 牛牛先抽, 每次抽牌他们可以从纸牌堆中任意选择一张抽出, 直到纸牌被抽完。 他们的得分等于他们抽到的纸牌数字总和。 现在假设牛牛和羊羊都采用最优策略, 请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。

输入描述:
输入包括两行。
第一行包括一个正整数n(1 <= n <= 105),表示纸牌的数量。
第二行包括n个正整数ai(1 <= ai <= 109),表示每张纸牌上的数字。
输出描述:
输出一个整数, 表示游戏结束后牛牛得分减去羊羊得分等于多少。
输入例子1:
3
2 7 4
输出例子1:
5

一种弄简单的java代码实现:

import java.util.*;

public class Test_2 {
    public static void main(String[] args) {
        //input
        Scanner scanner = new Scanner(System.in);
        String[] arr = new String[2];
        for (int i = 0; i < 2; i++) {
            arr[i] = scanner.nextLine();
        }
        int m = Integer.parseInt(arr[0]);
        Integer[] array = new Integer[m];
        String[] a = arr[1].split(" ");
        for (int i = 0; i < m; i++) {
            array[i] = Integer.parseInt(a[i]);
        }
        Arrays.sort(array,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                if (o1 < o2)
                    return 1;
                else if (o1 > o2)
                    return -1;
                else
                    return 0;
            }

        });
        int niuniu = 0;
        int yangyang = 0;

        for (int i = array.length - 1; i >= 0; i--) {
            if (i % 2 ==0){
                niuniu += array[i];
            }else{
                yangyang += array[i];
            }
        }

        System.out.println(niuniu - yangyang);
        scanner.close();
    }
}

高级python实现:

n = int(input())
    num_list = list(map(int, input().split()))
    num_list.sort(reverse=True)
    s = 0
    for i in range(n):
        s += (-1) ** i * num_list[i]
    print(s)

笔试题3

小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力

输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。
输出描述:
输出一个数表示小Q第一天最多能吃多少块巧克力。
输入例子1:
3 7
输出例子1:
4

java代码实现:

笔试题4-两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

python代码实现:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i] + nums[j] == target:
                    return [i,j]

写在最后

欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。 微信公众号个人博客