현재 위치 - 주공해몽공식사이트 - 랜덤 번호 뽑기 점술 - 파스칼로 올해 매달 13 을 찾아내는 것은 요일이다.

파스칼로 올해 매달 13 을 찾아내는 것은 요일이다.

분석

월 단위, 시뮬레이션 계산, 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

끄기 (입력); 끄기 (출력);

중지;

끝내다.