AcWing 1341. 十三号星期五(JAVA的Calendar类实现,不用考虑闰年、月份等问题)
原题链接
简单
作者:
青岳
,
2021-01-20 11:00:42
,
所有人可见
,
阅读 697
思路详述
本题要求计算出自1900到1900+n-1年中每月13号是周几的频率,也就是说要计算共12*n次不同年月中13号是周几。
我们每次只需要让Calendar类实例的月份加一再获取13号是周几即可,因为Calendar类会根据月份自动调整年份。
比如我们设置日期为(1900,13,13)即表示1901年2月13号,因为0~11表示1~12月,所以13-11=2即1901年的2月。
样例
import java.util.*;
public class Main{
public static void main(String args[]){
Calendar c=Calendar.getInstance();//创建Calendar类实例
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] b=new int[7]; //定义数组存放13号为周六~周五的频率,顺序和题目要求有关
for(int i=0;i<12*n;i++){
c.set(1900,i,13);//设置Calendar类日期,Calendar类会自动根据溢出的月份调整年份
int a=c.get(Calendar.DAY_OF_WEEK);//获取本年月的13号是周几,1~7表示周日~周六
b[a%7]++;//相应频数加一,因为7表示周6,根据题意b[0]表示周六,1表示周日,由题意b[1]表示周日,以此类推可知,将a对7取余即可知道该让数组中哪个元素加一
}
for(int i=0;i<7;i++)
System.out.print(b[i]+" ");
}
}
这个思路很不错,但是美中不足的是switch语句你没写default。。。然后我觉得这样子写太长了
谢谢提醒哈,我又优化了一下,把switch语句改成了
b[a%7]++;
geigeigei
哈哈哈哈 牛了牛了 我没想到,y总故意设置这么输出答案的吧hhh,完美契合