招商银行笔试编程题

记录了一下4月9日招商银行的笔试题中的编程题

第一题,巧克力

第二题,倒水

第一题,巧克力

题目描述:

1
2
3
4
5
6
期未到了,老师为了表扬各位学生,购买了与学生数量相同的巧克力。
* 老师制定了一个规则,每位学生按学号顺序依次独自进入他的办公室,
* 他会随机给一定数量的巧克力给进入他办公室的学生(最少1块,学号靠后的同学可能拿不到巧克力)。
* 小招喵的学号是1,所以他是第一个进入老师办公室的。他希望自己能从老师那里拿到至少6块巧克力。
* 他希望你帮他计算一下他拿到至少6块巧克力的方案数一共是多少(如果最终分配方案中,某个学号的同学拿到的巧克力数不一样则认为是不同的方案)。
* 最终的结果可能很大,输出对6666666取模后的结果。

输入描述:

一个整数n,代表学生的人数。

输出描述

一个整数ans,代表方案数对6666666取模后的结果。

实例1

输入

6

输出

1

实例2

输入

8

输出

4

题目分析:

这道题比较简单,我们先列下变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*	6: 6     ->1
* 7: 6 1 ->2
* 7
* 8: 6 1 1 ->4
* 6 2
* 7 1
* 8
* 9: 6 3 ->8
* 6 2 1
* 6 1 1 1
* 6 1 2
* 7 1 1
* 7 2
* 8 1
* 9
* .......

不难看出这是一个$2^0,2^1,2^2,2^3……2^{n-6}$,所以就可以写代码了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Chocolate {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
if( n < 6){
System.out.println(0);
}else{
System.out.println(Math.pow(2, n-6) % 6666666);
}
//get(n);
}

//public static void get(int n){
// int result = 1;
// for(int i = 0; i < n - 6; i++){
// result *= 2;;
// result %= 6666666;
// }
// System.out.println(result);
//}
}

第二题,倒水

题目描述:

1
2
3
给出n*2个杯子,每个杯子的容星为ai,以及w毫升的水,
小招喵将要接待n个男孩和n个女孩。每人一个杯子,倒水的规则如下:-每个男孩杯子里的水量要相同-每个女孩杯子里的水量要相同
一男孩杯子里的水量要是女孩杯子里的水量的两倍。问最多总共能倒入多少毫升水。

输入描述:

输入包含两行。
w(1≤n≤105, 1≤w≤10%)
第一行为两个整数n和
第二行为2n个整数a1,a2…a2n(1≤ai≤10^9)

输出描述

一个数, 表示最多倒入多少 毫升水,答案保留6位小数。

示例

输入

2 4

1 1 1 1

输出

3.000000

直接贴代码,分析写在代码注释里了

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
import java.util.Arrays;
import java.util.Scanner;
public class PourWater {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(), w = scanner.nextInt();
int[] a = new int[2 * n];
for (int i = 0; i < 2 * n; i++) {
a[i] = scanner.nextInt();
}
// 将杯子容量进行排序
Arrays.sort(a);
// 男生的第一个杯子,女生的第一个杯子
double bMin = a[n], gMin = a[0];
double ans;
// 如果男生的第一个杯子比女生第一个杯子2倍少
if (bMin / 2 <= gMin) {
// 女生的杯子容量是男生第一个杯子的1/2
ans = bMin * 1.5 * n;
} else {//男生的第一个杯子比女生第一个杯子2倍多
// 男生的杯子容量是女生第一个杯子的2倍
ans = gMin * n * 3;
}
// 判断总容量
if (ans >= w) {
ans = w;
}
System.out.printf("%.6f", ans);
}
}
0%