返回
拿捏算法刷题之旅,从简单题起步!
后端
2023-09-20 15:22:38
在算法学习的旅途中,我们总是从简单题开始,一步步提升自己的解题能力。牛客试题广场提供了许多适合算法入门的题目,今天我们就来尝试两道入门级题目,分别是「计算日期到天数转换」和「幸运的袋子」。
「计算日期到天数转换」题:
从公元1970年1月1日开始算起,给定一个日期,求出从1970年1月1日到该日期的天数。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateToDays {
public static void main(String[] args) throws ParseException {
// 给定日期字符串
String dateStr = "2023-03-08";
// 设置日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 将日期字符串解析成日期对象
Date date = sdf.parse(dateStr);
// 获取自1970年1月1日以来的天数
long days = date.getTime() / (1000 * 60 * 60 * 24);
// 输出结果
System.out.println("从1970年1月1日到" + dateStr + "的天数:" + days);
}
}
「幸运的袋子」题:
有n个袋子,每个袋子装有若干个物品,每个物品都有一个价值。现在允许你选择k个袋子,并把这些袋子里的所有物品都拿走。求在所有可能的方案中,你最多能拿走多少价值的物品。
import java.util.Scanner;
public class LuckyBag {
public static void main(String[] args) {
// 输入袋子个数和物品总价值
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] values = new int[n];
for (int i = 0; i < n; i++) {
values[i] = scanner.nextInt();
}
// 计算最多能拿走的价值
int max = 0;
for (int i = 0; i < (1 << n); i++) {
int sum = 0;
int count = 0;
for (int j = 0; j < n; j++) {
if ((i & (1 << j)) > 0) {
sum += values[j];
count++;
}
}
if (count == k && sum > max) {
max = sum;
}
}
// 输出结果
System.out.println("最多能拿走的价值:" + max);
}
}
这两道题都是算法入门的好选择,难度适中,解法清晰。希望通过这两道题,你能感受到算法刷题的乐趣,并为之后的刷题之路做好准备。
刷题的路上,难免会遇到困难和瓶颈,但只要坚持不懈,你终将突破自我,成为算法高手!