笔试题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-代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 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。
牛牛和羊羊轮流抽牌, 牛牛先抽, 每次抽牌他们可以从纸牌堆中任意选择一张抽出, 直到纸牌被抽完。
他们的得分等于他们抽到的纸牌数字总和。
现在假设牛牛和羊羊都采用最优策略, 请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。
输入描述:
1 2 3
| 输入包括两行。 第一行包括一个正整数n(1 <= n <= 105),表示纸牌的数量。 第二行包括n个正整数ai(1 <= ai <= 109),表示每张纸牌上的数字。
|
输出描述:
1
| 输出一个整数, 表示游戏结束后牛牛得分减去羊羊得分等于多少。
|
输入例子1:
输出例子1:
一种弄简单的java
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import java.util.*;
public class Test_2 { public static void main(String[] args) { 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
实现:
1 2 3 4 5 6 7
| 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决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力
输入描述:
1 2
| 每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。
|
输出描述:
输入例子1:
输出例子1:
java
代码实现:
笔试题4-两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
python
代码实现:
1 2 3 4 5 6
| 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】,让我们一起成长,谢谢。