基姆拉尔森公式:
求星期几非常好用的公式
注意
m==1 or m==2时
m=m+12,y=y-1;具体的原因我也不知道但是只要记住这个公式就行🤭
以下是java代码模板
public static int Week(int y,int m,int d){
if(m==1||m==2){
m+=12;
y--;
}
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
}
返回值为0~6,分别对应星期一到星期天。
洛谷相关题目P1202 [USACO1.1]黑色星期五Friday the Thirteenth:
相当的简单,可以使用纯暴力但是好些在洛谷会超时,使用此公式就可以把日期固定在13日直接算星期几了,下面附上代码,小白写得不是很好,请见谅:
import java.util.*;
public class Main {
public static void main(String []args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[7];
for(int i=1900;i<=1900+n-1;i++) {
for(int j=1;j<=12;j++) {
int m=j,y=i;
if(m==1||m==2) {
m+=12;
y--;
}
int d=13;
switch((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7) {
case 0:a[2]++;break;
case 1:a[3]++;break;
case 2:a[4]++;break;
case 3:a[5]++;break;
case 4:a[6]++;break;
case 5:a[0]++;break;
case 6:a[1]++;break;
}
}
}
for(int i=0;i<7;i++) {
System.out.print(a[i]+" ");
}
}
}
如果需要其他语言的代码可以使用ChatGPT直接代码转换哟,但是相信各位大佬都不会在乎这个简单题嘿嘿。