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);
}
}