蓝桥杯冲刺31天打卡day6

文章提供了三道编程题目,分别是关于日期计算、考勤系统的数据处理和卡片分配问题。第一题使用Java的大数类BigInteger解决20的22次方后是星期几的问题;第二题利用TreeSet进行考勤刷卡数据的去重与排序;第三题通过数学方法解决最小卡片种类需求问题。
摘要由CSDN通过智能技术生成

1、星期计算

由于数据庞大,使用大数类,注意定义,最后求出模除后的数后注意和开始的星期六进行相加从而 判断是不是星期日的特殊情况

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

已知今天是星期六,请问 20^22 天后是星期几?

注意用数字1到7表示星期一到星期日。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M
import java.util.*;
import java.math.*;
public class 星期计算 {

	public static void main(String[] args) {
    BigInteger nums = new BigInteger("20");//注意定义好大数类,所有操作都必须是大数类
    BigInteger sum = new BigInteger("1");
    for(int i = 1;i<=22;i++){
    	sum=sum.multiply(nums);
    }
    BigInteger i = new BigInteger("7");
    BigInteger res = new BigInteger("6");
    BigInteger zero = new BigInteger("0");
    	sum = sum.remainder(i);
    	if(res.add(sum).remainder(i).equals(zero)) {//注意不能直接用==,必须用equals
    		System.out.println(i);//正好是星期日
    	}
    	else {
    		System.out.println(res.add(sum).remainder(i));//不是星期日
    	}
    
	}
}

 

 

2、 考勤刷卡

根据题意得知,每次输出时间与编号之间用空格隔开,所以我们只需要用next()将时间部分存到s里,再将编号存到n里。因为编号不能重复,所以我们使用TreeSet进行排序加去重,开始使用的是HashSet,但是HashSet 需要再进行排序,直接就用TreeSet更加方便。

import java.util.*;
public class 考勤刷卡 {
     static TreeSet<Integer>set = new TreeSet<>();
    public static void main(String[] args){
    	Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while(n-->0){
        String s = sc.next();
        int nums = sc.nextInt();
        set.add(nums);

        }
      for(int num:set){
        System.out.println(num);
      }
    }
}

3、卡片

小蓝有 k 种卡片, 一个班有 n 位同学, 小蓝给每位同学发了两张卡片, 一 位同学的两张卡片可能是同一种, 也可能是不同种, 两张卡片没有顺序。没有 两位同学的卡片都是一样的。

给定 n, 请问小蓝的卡片至少有多少种?

输入格式

输入一行包含一个正整数表示 n 。

输出格式

输出一行包含一个整数, 表示答案。

样例输入


6

样例输出


3

 

样例说明

小朋友们手中的卡片可能是: (1,1),(1,2),(1,3),(2,2),(2,3),(3,3) 。

评测用例规模与约定

对于 50 的评测用例, 1≤n≤104 。

对于所有评测用例,1≤n≤109 。

 思路:直接看手写分析吧,这题二分也可以,找规律也行

 

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = 0;
        while(n>0){
          k++;
          n-=k;
        }
        System.out.println(k);
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值