월 단위, 시뮬레이션 계산, 1900 65438+ 10 월 13 은 토요일 (코드 1), 다음 달/
데이터가 작기 때문에 시간이 초과되지 않습니다.
데이터가 비교적 클 때는 매년 365 일, mod 7 의 나머지는 1 입니다. 즉, 매년 모든 날과 주가 하루, 윤년 오류 1, 2 월 오류 1, 3 월입니다. 이렇게 하면 첫해의 해법을 먼저 찾으면, 탈구를 이듬해에 추가할 수 있다.
상세 분석: 1900. 1. 1 이 월요일이기 때문에1900./kloc-0 이것은 분명하지 않을 수도 있습니다. 그럼 제가 설명하겠습니다. 7 일마다 일주일입니다. N 일 후 요일은 무엇입니까? 이제 우리는 n 이 7 의 배수라고 가정합니다. N 이 14 이고 정확히 2 주인 경우 14 이후 또는 월요일입니다. 하지만 15 일이라면 화요일로 계산하겠습니다. 이런 식으로, 우리는 계산을 위한 공식을 추론할 수 있다. (n 일 mod 7 (요일)+현재 날짜의 코드) mod 7 이 현재 날짜와 같은 코드입니다. 괄호 안의 값이 7 의 배수일 때, 그 코드명은 0 이고, 이때는 일요일이어야 한다. 우리는 제목의 알고리즘을 얻을 수 있다.
Inta [13] = {0,31,28,31,30,31
Int b[8]={0}
배열 A 는 1 년 중 12 개월의 일 수를 저장합니다 (C 언어의 배열에 대한 초기 아래 첨자는 0 이므로 13 으로 정의됨).
B 배열은 월요일부터 일요일까지의 일 수를 저장합니다. Date 를 사용하여 다음 주 몇 주의 코드를 기록한 다음 두 개의 루프를 사용하여 한 달 중의 날짜를 차례로 더하면 그 달이 요일임을 알 수 있다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 달명언) 물론 윤년을 판단하는 데 주의해야 한다! 이 방법을 알면 쉽게 실현할 수 있다.
윤월을 주의하다.
마지막으로 줄 바꿈에 주의하십시오. 그렇지 않으면 오류가 발생합니다.
젤러 공식도 사용할 수 있습니다.
소스 코드
방법 1
[추러 공식을 사용하지 마세요]
절차 5 001;
변수를 정의합니다
Wk: 배열 [0..6] 에 대한 갈망;
N, I, j, x, s, days, NK, m: longint;
시작
Assign (입력,' friday.in'); 재설정 (입력);
Assign (출력,' friday.out'); 다시 쓰기 (출력);
Readln (n);
Nk: =1; M: = 0; X: =13mod 7;
I:= 1900 부터 1900+n- 1 do 까지
시작
J:= 1 끝 12 do 의 경우
시작
사례 j
1, 3,5,7,8, 10, 12: 일: = 31;
4,6,9, 1 1: 일: = 30;
2 :if (i mod 4 = 0) 및 (imod100 < & gt0) 또는 (I mod 400 = 0)
그럼 일수: =29
Else 일 수: = 28;
끝;
Wk [(x+NK-1) mod7]: = wk [(x+NK-1) mod7]+/kloc-
M: = daysmod7;
S: = NK;
S+m=7 이면 NK:= 7;;
Nk: = (m+s) mod7;
끝;
끝;
Writeln(wk[6],'', wk[0],'', wk[ 1],'', wk[2],','
끄기 (입력); 끄기 (출력);
끝내다.
방법 2
{추러 공식에 따라 작성된 코드. }
변수를 정의합니다
N, I, j, 연도, m, c, y, w: longint;
A: 배열 [0..6] 에 대한 갈망
시작
Assign (입력,' friday.in'); 재설정 (입력);
Assign (출력,' friday.out'); 다시 쓰기 (출력);
Readln (n);
I:= 1900 부터 1899+n do 까지
J:= 1 끝 12 do 의 경우
시작
연도: = I;;
M: = j;
(m= 1) 또는 (m=2) 인 경우
시작
12 월 (년);
M: = m+12;
끝;
C:= 년 분100;
Y:= 년 mod100;
W: = (y+y div4+c div4-2 * c+26 * (m+1) div10+/kloc-
W: = (w+7) mod7;
Inc (a [w]);
끝;
Writeln(a[6],'', a[0],'', a[ 1],'', a[2],'', a
끄기 (입력); 끄기 (출력);
중지;
끝내다.