第一题:给定2000年1月1日是星期六,输入是年份,月份,周数和一周的第几天,输出日期。
例:输入:
2022 08 3 2
输出:
2022-08-16
代码如下:
- import java.util.Scanner;
-
- public class Main {
-
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- String[] s = sc.nextLine().split(" ");
- int year = Integer.parseInt(s[0]);
- int month = Integer.parseInt(s[1]);
- int week = Integer.parseInt(s[2]);
- int day = Integer.parseInt(s[3]);
- int tmp = 0;
- for(int i=2000;i
- if(isRun(i)){
- tmp += 366 % 7;
- }else{
- tmp += 365 % 7;
- }
- }
- int[] count = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- if(isRun(year)){
- count[1] = 29;
- }
- for(int i=0;i
1;i++){ - tmp+= count[i];
- }
- tmp = tmp % 7;
- int res = 0;
- int[] xinqi = {6, 7, 1, 2, 3, 4, 5};
- tmp = xinqi[tmp]; //表示1号是星期几
- System.out.println("1号: " + tmp);
- int w = week;
- //System.out.println("....");
- if(w == 1){
- if(tmp > day){
- System.out.println(0);
- return;
- }else{
- res = day - tmp + 1;
- if(month < 10){
- System.out.println(year + "-0"+ month + "-0" + res);
- return;
- }else{
- System.out.println(year + "-"+ month + "-0" + res);
- return;
- }
-
- }
- }else{
- res += 7 - tmp + 1;
- w--;
- while(w != 1){
- res += 7;
- w--;
- }
- res += day;
- if(res > count[month]){
- System.out.println(0);
- return;
- }
- if(month < 10){
- if(res < 10){
- System.out.println(year + "-0"+ month + "-0" + res);
- return;
- }
- System.out.println(year + "-0"+ month + "-" + res);
- return;
- }else{
- if(res < 10){
- System.out.println(year + "-"+ month + "-0" + res);
- return;
- }
- System.out.println(year + "-"+ month + "-" + res);
- return;
- }
- //System.out.println(year + "-"+ month + "-" + res);
- }
- }
-
- public static boolean isRun(int year){
- if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
- return true;
- }
- return false;
- }
-
-
-
- }
第二题与牛客上的一题很类似,做项目的最大收益问题

代码如下
- //贪心算法,按照成本先将所有项目升序排列,然后把能做的项目拿出来按照利润降序排列,
- // 选择利润最大的做,周而复始直到无项目可做。用一个大根堆和一个小根堆来完成排序操作。
- public static void main(String[] args) {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String[] params = br.readLine().split(" ");
- PriorityQueue<int[]> minHeap = new PriorityQueue<>((program1, program2)->program1[0] - program2[0]);
- PriorityQueue<int[]> maxHeap = new PriorityQueue<>((program1, program2)->program2[1] - program1[1]);
- int n = Integer.parseInt(params[0]), k = Integer.parseInt(params[2]);
- long w = Long.parseLong(params[1]);
- int[][] programs = new int[n][2];
- params = br.readLine().split(" ");
- for(int i=0;i
0] = Integer.parseInt(params[i]); - params = br.readLine().split(" ");
- for(int i=0;i
- programs[i][1] = Integer.parseInt(params[i]);
- minHeap.offer(programs[i]);
- }
- //只能做k个项目
- for(int i=0;i
- while(!minHeap.isEmpty() && w >= minHeap.peek()[0]){
- maxHeap.offer(minHeap.poll());
- }
- if(maxHeap.isEmpty())
- break; //没有可做的项目了
- else
- w += maxHeap.poll()[1]; //可以做的项目选利润最大的
- }
- System.out.println(w);
- }
第三题:超级左旋
小立是一个乒乓球手,他的“超级左旋非常强大。
小立给自己制定了一份n天的训练计划来锻炼〝超级左旋”,并旦他每天会记录下失误的次数。
每天的训练结束后,小立都会进行反思自己是否退步。
之前每有一天的失误次数比今天的多,都会使他的能力值-1。
之前每有一天的失误次数比今天的少,都会使他的能力值+1。
之前每有-一天的失误次数与今天相同,不会影响他的能力值。
每天的能力值柠继承至下一天。初始能力值为0。
因为第—天没有之前的失误次数作为对照,所以第一天结束后,能力值不会改变。
求小立能力值最高时为多少,以及训练结束后小立的最終能力值为多少。
输入要求
输入一个数字T,表示有T组测试数据。
对于每组测试数据。第一行输入一个n,表示小立训练的天数。
第二行输入n个数字,ai(1 (1 <= n, ai<=100000)
输出要求
对于每组测试数据,输出两个数字表示小立能力值最高为多少,以及训练结束后小立的最终能力值为多少
示例
输入
- 2
- 3
- 1 3 2
- 3
- 2 1 3
输出
- 1 1
- 1 1
代码如下:
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int t = sc.nextInt();
- sc.nextLine();
- List
list = new ArrayList<>(); - int maxScore = 0;
- for(int i=0;i
- int days = sc.nextInt();
- sc.nextLine();
- String[] fault = sc.nextLine().split(" ");
- Integer[] faultNum = new Integer[fault.length];
- for(int j=0;j< fault.length;j++){
- faultNum[j] = Integer.parseInt(fault[j]);
- }
- list.add(faultNum);
- }
-
- for(int i=0;i
- Integer[] temp = list.get(i);
- int[] energy = new int[temp.length];
- for(int j=1;j
- int high = 0;
- int low = 0;
- for(int k=1;k<=j;k++){
- if(temp[k-1] > temp[j]){
- low++;
- }else if(temp[k-1] < temp[j]){
- high++;
- }
- }
- energy[j] = energy[j-1] - low + high;
- if(energy[j] > maxScore){
- maxScore = energy[j];
- }
- }
- System.out.println(maxScore + " " + energy[energy.length - 1]);
- }
-
-
- }
不知道为啥我用暴力只过了20%,超时了
-
相关阅读:
这些负载均衡都解决哪些问题?服务、网关、NGINX
VR数字展厅在企业中应用的优势有哪些?
CSS小计
数据结构(c语言版) 树的遍历
Master PDF Editor v5.9.70便携版
《OpenDRIVE1.6规格文档》2
Java-BigInteger类(详解)
node.js --- npm模块 以及 项目配置文件
【CF1693C】Keshi in Search of AmShZ(类dijkstra)
Linux脚本shell中将Windos格式字符转换为unix
-
原文地址:https://blog.csdn.net/qq_38235017/article/details/126374194