蓝桥杯 2020年省赛真题

B.纪念日

在这里插入图片描述

利用java 8 中的日期类来解答ChronoUnit.DAYS.between()算出一共有多少天,然后转换为分钟数

package com.lanqiao2020;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class BMain {
	public static void main(String[] args) {
		LocalDate per = LocalDate.of(1921, 7, 23);
		LocalDate cur = LocalDate.of(2020, 7, 1);
		long between = ChronoUnit.DAYS.between(per, cur);
		System.out.println(between);
		long res=between*60*24;
		System.out.println(res);
	}

}
36138
52038720
C.合并检测

在这里插入图片描述

package com.lanqiao2020;

public class CMain {
	public static void main(String[] args) {
		int k=0;
		int max=Integer.MAX_VALUE;
		int count=0;
		for(int i=1;i<=100;i++) {
			if(100%i==0) {
				count=100/i+i;
			}else {
				count=100/i+1+i;
			}
			if(count<max) {
				max=count;
				k=i;
			}
		}
		System.out.println(k);
	}

}
答案:10
D.分配口罩

在这里插入图片描述

9090400
8499400
5926800
8547000
4958200
4422600
5751200
4175600
6309600
5865200
6604400
4635000
10663400
8087200
4554000

思路:用dfs 深度优先算法,明确选择是我们的医院1 和医院2,每轮递归都会用到这两个选择。然后路径的话是我们的总数据(一共15个数据),即进行完15轮就结束了。最后的终止条件是 等加完了所有的数据之后,我们挑选所有情况的最小值。

package com.lanqiao2020;

import java.util.LinkedList;
import java.util.Scanner;

public class DMain {
	static int min = Integer.MAX_VALUE;
	static int sum1, sum2 = 0;
	static LinkedList<Integer> arrList = new LinkedList<>();

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		for (int i = 0; i < 15; i++) {
			int num = scan.nextInt();
			arrList.add(num);
		}
		dfs(0);
		System.out.println(min);
	}

	public static void dfs(int index) {
		if (index == 15) {
			min = Math.min(Math.abs(sum1 - sum2), min);
		} else {
			sum1 += arrList.get(index);
			index++;
			dfs(index);
			index--;
			sum1 -= arrList.get(index);

			sum2 += arrList.get(index);
			index++;
			dfs(index);
			index--;
			sum2 -= arrList.get(index);
		}
	}

}
E 斐波那契数列最大公约数
package com.lanqiao2020;

import java.math.BigInteger;

public class EMain {
	public static void main(String[] args) {
		BigInteger num520=BigInteger.ZERO;BigInteger num2020=BigInteger.ZERO;
		BigInteger n1=BigInteger.ONE; BigInteger n2=BigInteger.ONE; BigInteger n3=BigInteger.ZERO;
		for(int i=3;i<=2020;i++) {
			n3=n1.add(n2);
			if(i==520) {
				num520=n3;
			}
			if(i==2020) {
				num2020=n3;
			}
			n1=n2;
			n2=n3;
		}
		System.out.println(num520);
		System.out.println(num2020);
		System.out.println(gcd(num520, num2020));
			
	}
	public static BigInteger gcd(BigInteger a,BigInteger b) {
		while(!b.equals(BigInteger.ZERO)) {
			BigInteger temp=a;
			a=b;
			b=temp.mod(b);
		}
		return a;
	}
}

F 分类计数
package com.lanqiao2020;

import java.util.Scanner;

public class FMain {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		char[] charArray = str.toCharArray();
		int upperCount = 0;
		int lowerCount = 0;
		int digitCount = 0;
		int n = charArray.length;
		for (int i = 0; i < n; i++) {
			if (Character.isUpperCase(charArray[i])) {
				upperCount++;
			} else if (Character.isLowerCase(charArray[i])) {
				lowerCount++;
			} else if (Character.isDigit(charArray[i])) {
				digitCount++;
			}
		}
		System.out.println(upperCount);
		System.out.println(lowerCount);
		System.out.println(digitCount);
		
	}
}


1+a=Aab
1
3
1

G 八次求和

用BigInteger 解答

package com.lanqiao2020;

import java.math.BigInteger;
import java.util.Scanner;

public class GMain {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n = scanner.nextInt();
		scanner.close();
		BigInteger sum=BigInteger.ZERO;
		
		for(int i=1;i<=n;i++){
			sum= sum.add(new BigInteger(""+i).pow(8));
		}
		BigInteger modNum = BigInteger.valueOf(123456789);
		sum=sum.mod(modNum);
		System.out.println(sum);
		
	}
}

I BST插入节点问题
package com.lanqiao2020;

import java.util.Scanner;

public class IMain {
	//MAX表示无穷大
    static int  MAX=Integer.MAX_VALUE;
    //MAX表示无穷小
    static int MIN=Integer.MIN_VALUE;
	public static void main(String[] args) {
		Scanner  scan=new Scanner(System.in);
		int N = scan.nextInt();
		int K = scan.nextInt();
		
		Node[] nodes=new Node[N];
		for(int i=0;i<N;i++) {
			int parentId = scan.nextInt();
			int weight = scan.nextInt();
			
			if(i==0) {
				nodes[0]=new Node(1,parentId,weight,MIN,MAX);
			}else {
				int min=0;
				int max=0;
				
				Node parent= nodes[parentId-1];
				if(weight>parent.weight) {
					min=parent.weight+1;
					max=parent.maxVal;
					parent.maxVal=parent.weight;
				}else {
					max=parent.weight-1;
					min=parent.minVal;
					parent.minVal=parent.weight;
				}
				nodes[i]=new Node(i+1,parentId,weight,min,max);
			}
			
		}
		
		if(nodes[K-1].minVal==MIN||nodes[K-1].maxVal==MAX){
            System.out.println(-1);
        }else{
            System.out.println(nodes[K-1].maxVal-nodes[K-1].minVal);
        }

	}
}
class Node {
	int id;
	int parentId;
	int weight;
	int minVal;
	int maxVal;
	
	public Node(int id,int parentId,int weight,int minVal,int maxVal) {
		this.id=id;
		this.parentId=parentId;
		this.weight=weight;
		this.minVal=minVal;
		this.maxVal=maxVal;
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值