0%

算法题

记录一些遇到的算法。

题1

小明去买评估,商店做活动,提供捆绑打包销售,例如每袋3个和每袋5个的形式出售。现小明只想购买n个苹果,同时想购买尽量少的袋数⽅便携带。如果不能购买恰好n个苹果,就不会购买(可返回-1),求解输出最少的袋数。(例如:18)

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
import java.util.Scanner;

// 先通过列举法找到其中的规律
public class ZHYTest {
public static void main(String[] args) {
for (int n = 1;n < 100 ;n++){
System.out.println(n + "==》" + bagCount(n));
}
}

private static int bagCount(int n){
if (n < 3 || n == 4 || n == 7){
return -1;
}
if (n % 5 == 0){
return n / 5;
}
// 通过规律,我们得知从8及8以后的数字一定能够被3和5整分掉
int a = n / 5;
int remain3 = n % 5;
while (remain3 % 3 != 0){
a--;
remain3 += 5;
}
return a + remain3 / 3;
}
}