cc1.日期和进制问题———选择题。
填空题
- 第一个填空题。第二题可以跳过。
30min在填空题,必须要把第一题拿下。
99.9考数学以及一些简单模拟题
做每一组的填空题的第一题各组别的,找pdf,填空题正确率。
- 写最笨的方法,纯模拟,不要考虑复杂度。
假设法是最好的方法。
握手问题有7个之间不握手,直接假设前七个人之间不握手。
高精度Java自带,可以学一下,但是这么多年就考了一个
觉得难背就放弃,用longlong计算。
学Java快读模板
有的题目是要跑很久,填空题放那跑,不是死循环,十分钟正常,放那让他跑,看后面的题目,可以重新建一个文件编写。
进制问题
背个模板,进制转换用python很简单,自带转换,要是是填空题可以用python跑答案。
import os
import sys
print(int('2022',9))
int temp=Integer.valueOf(x,2);//先将x由二进制转换为对应的十进制。
String result=Integer.toString(temp,n);//把十进制转换为对应想转换的进制
首先就是将该数从其进制转换为十进制:
int temp=Integer.valueOf(x,m)````将x由m进制转换为十进制 其次明确转换后的为字符形式,所以可以用String来存储整个字符,或者说将字符串通过toCharArray将其转换为char形式
char []count=Integer.toString(num,2).toCharArray();```在这里首先将num从十进制转换为2进制的字符串,类型为String,再通过toCharArray来将其分割成字符数组,以便于一个一个操作。
在这里,若是转换为二进制,那么考虑对最后一位的操作。x&1判断最后一位为1还是0,因为前面都是0所以只有最后一位有答案。再通过
x>>=1
将x右移一位,判断倒数第二位,注意这里一定要移位后赋值,否则x不会被改变。
特别注意,在这里就不用把其转换为二进制了,因为位运算实质就会自动进行。
若是转换为字符数组char 【】temp,那么注意,在这里比较的是temp【i】==‘1’,是字符1而不是数字1.还有在char中获取数组长度temp.length。没有括号
日期问题。
设计日期问题,要学会映射
最恶心就是要判断闰年,首先是400的倍数就是闰年,或者是4的倍数并不是100的倍数。
年份可以被4整除但不能被100整除的年份,或者可以被400整除的年份
`` if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)//能整除4且不能整除100 或能整除400
{
printf(“%d是闰年\n”,i);
}
```
闰年那么二月就是29天,不然就是28天。然后呢,按照目前day去+并取余,这样看是星期几。
问题描述
小蓝出生在一个艺术与运动并重的家庭中。
妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运动的激情和团队合作的精神。
为了既满足妈妈的期望,又不辜负爸爸的心意,小蓝决定根据日期的笔画数来安排自己的练习。首先,他会将当天的日期按照 “
Y
Y
Y
Y
M
M
D
D
YYYYMMDD” 的格式转换成一个
8
8 位数,然后将这
8
8 位数对应到汉字上,计算这些汉字的总笔画数。如果总笔画数超过
50
50,他就去练习篮球;如果总笔画数不超过
50
50,他就去练习书法。
例如,在
2024
2024 年
1
1 月
1
1 日这天,日期可表示为一个
8
8 位数字
20240101
20240101,其转换为汉字是“二零二四零一零一”。日期的总笔画数为
2
+
13
+
2
+
5
+
13
+
1
+
13
+
1
50
2+13+2+5+13+1+13+1=50,因此在这天,小蓝会去练习书法。
以下是汉字的笔画数对照表:
汉字 笔画数
零
13
13
一
1
1
二
2
2
三
3
3
四
5
5
五
4
4
六
4
4
七
2
2
八
2
2
九
2
2
现在,请你帮助小蓝统计一下,在
2000
2000 年
1
1 月
1
1 日到
2024
2024 年
4
4 月
13
13 日这段时间内,小蓝有多少天是在练习篮球?
答案提交
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
```java
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 每个月的天数,注意2月会根据闰年调整
int month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 每个数字对应的笔画数
int cnt[] = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2};
// 开始遍历
int res = 0;
for (int y = 2000; y <= 2024; y++) {
int up = (y == 2024) ? 4 : 12; // 如果是2024年,只计算前4个月
if (is_leap(y)) month[2] = 29; // 闰年2月有29天
else month[2] = 28; // 非闰年2月有28天
for (int m = 1; m <= up; m++) {
int up2 = (y == 2024 && m == 4) ? 13 : month[m]; // 如果是2024年4月,只计算前13天
for (int d = 1; d <= up2; d++) {
if (calc(y, m, d, cnt)) { // 调用calc方法计算是否需要跑步
res++;
}
}
}
}
System.out.println(res);
scan.close();
}
// 判断是否是闰年
public static boolean is_leap(int y) {
return (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0);
}
// 计算某一天的笔画数是否大于50
public static boolean calc(int y, int m, int d, int[] cnt) {
String s = Integer.toString(y); // 年份
if (m < 10) s += "0"; // 补零
s += Integer.toString(m); // 月份
if (d < 10) s += "0"; // 补零
s += Integer.toString(d); // 日期
int res = 0;
for (int i = 0; i < s.length(); i++) {
res += cnt[s.charAt(i) - '0']; // 计算笔画数 这里的charAt来逐个访问
}
return res > 50; // 判断是否需要跑步
}
}
补充
记住,java里面直接给数组赋值不用写明数组长度。还有另外写一个函数,那么需要在main外面定义函数,然后public static 函数类型 函数名称(),不要少了static。还有
用static修饰的方法,无须产生类的实例对象就可以调用该方法。 没有static修饰的方法,需要产生一个类的实例对象才可以调用该方法。 static变量是存储在静态存储区的,不需要实例化。 在main函数中调用函数只能调用静态的。 如果要调用非静态的,那么必须要先实例化对象,然后通过对象来调用非静态方法