蓝桥杯真题练习【1】判断日期有效、整数取整、大数字BigInteger、求余定理、剪枝

日期问题

输入描述
一个日期,格式是 “AA/BB/CCAA/BB/CC” (0 \leq A, B, C \leq 90≤A,B,C≤9)。

输出描述
输出若干个不相同的日期,每个日期一行,格式是 “yyyy-MM-ddyyyy−MM−dd”。多个日期按从早到晚排列。

输入输出样例
示例
输入

02/03/04

输出

2002-03-04
2004-02-03
2004-03-02


import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.TreeSet;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        String  temp=scanner.next();
        String  date[]=temp.split("/");
        String y=date[0],m=date[1],d=date[2],
                yMd=(Integer.parseInt(y)<60?"20"+y:"19"+y)+"-"+m+"-"+d,
                mDy=(Integer.parseInt(d)<60?"20"+d:"19"+d)+"-"+y+"-"+m,
                dMy=(Integer.parseInt(d)<60?"20"+d:"19"+d)+"-"+m+"-"+y;

        TreeSet<String> set = new TreeSet<String>();
        if(f(yMd)) set.add(yMd);
        if(f(mDy)) set.add(mDy);
        if(f(dMy)) set.add(dMy);
        //02/03/04
        for (Object object : set) {
    
    
            System.out.println(object);
        }
    }
    static boolean  f(String date){
    
    
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        format.setLenient(false);
        try {
    
    
            format.parse(date);
        }catch (Exception e){
    
    
            return  false;
        }
        return  true;
    }
}

学习 判读日期有效

    static boolean  f(String date){
    
    
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        format.setLenient(false);
        try {
    
    
            format.parse(date);
        }catch (Exception e){
    
    
            return  false;
        }
        return  true;
    }
}

format.setLenient(false);

该方法是用来控制是否将正确格式的不正确时间转化成正确的时间,默认为true,设置为false时,如果时间不正确,不会自动转化,而是抛出java.text.ParseException异常。

学习 整数取整

System.out.println(Math.round(yx/1.00/n*100)+"%");
//Math.round是向下取整的函数 原理为+0.5再向下取整

大数字问题

你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子,在第 22 个棋盘格放 22 粒麦子,在第 33 个棋盘格放 44 粒麦子,在第 44 个棋盘格放 88 粒麦子,…后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 6464 格)。

国王以为他只是想要一袋麦子而已,哈哈大笑。

当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!

请你借助计算机准确地计算,到底需要多少粒麦子。


import java.math.BigInteger;
import java.util.Iterator;

public class Main {
    
    
    public static void main (String[] arge) {
    
    
        BigInteger a =new BigInteger("0");
        BigInteger b = new BigInteger("2");
        for (int i = 0; i < 64; i++) {
    
    
            a = a.add(b.pow(i));
        }
        System.out.println(a);
    }
}

学习 大数字BigInteger使用


import java.math.*;

BigInteger a , b;
		a=cin.nextBigInteger();
		b=cin.nextBigInteger();
		
		BigInteger ans_add,ans_sub,ans_mul,ans_div,ans_mod;
		
		ans_add = a.add(b); //a+b
		ans_sub = a.subtract(b); //a-b
		ans_mul = a.multiply(b); //a*b
		ans_div = a.divide(b); //a/b
		ans_mod = a.mod(b); //a%b
		System.out.println("a + b = "+ans_add);
		System.out.println("a - b = "+ans_sub);
		System.out.println("a * b = "+ans_mul);
		System.out.println("a / b = "+ans_div);
		System.out.println("a % b = "+ans_mod);

k倍区间

学习 同余数的思想
在这里插入图片描述

四平方和数

https://www.lanqiao.cn/problems/122/learning/

学习剪枝

Guess you like

Origin blog.csdn.net/qq_41852212/article/details/121318827