Input: Nhập vào ngày, tháng, năm bất kỳ.
output: In ra ngày, tháng. năm đó tương ứng với thứ mấy.
Viết bằng Pấcl ấy, giải thích thuật toán mà bạn sử dụng luôn nhá!
Bài này rất hay mọi người giải giúp
Started By chocuong21, 09-12-2007 - 16:39
#1
Posted 09-12-2007 - 16:39
#2
Posted 09-12-2007 - 17:22
bài này bạn phải có 1 ngày cố định là thứ mấy mới làm đc chứ. Thuật toán là bạn tính coi ngày đó là ngày thứ mấy của năm (vd: 1/2 là ngày thứ 32 của năm) rồi đem chia 7 dư bao nhiu đem so với ngày cố định ra đc ngày đó là thứ mấy
Edited by math_galois, 09-12-2007 - 18:01.
#3
Posted 06-05-2009 - 19:37
Không khó nhỉ
- Quan trọng là tính xem từ ngày cần tính đến 1 ngày làm mốc (tui chọn ngày 1/1/1, nhưng trong thực tế trên máy tính thì người ta chọn 1/1/1900 cho dễ)
-Mảng tháng cho biết từ ngày 1/1 đến ngày 1/tháng đã trải qua thời gian bao nhiêu
-Dòng
-Dòng
-Dòng
#include<stdio.h> int songaydenthang[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365}; char *thu[]={"Thu hai","Thu ba","Thu tu","Thu nam","Thu sau","Thu bay","Chu nhat"}; int nhuan(int nam){ return (nam%4)?0:(nam%100)?(nam%400)?0:1:1; } int chenhlech(int ngay,int thang,int nam){ int temp=ngay+songaydenthang[thang]+(nam-1); temp+=(nam-1)/4-3*nam/400; if(nhuan(nam)&&(thang>2))temp++; return (temp-1)%7; } void main(){ puts(thu[chenhlech(i,5,2009)]); }
- Quan trọng là tính xem từ ngày cần tính đến 1 ngày làm mốc (tui chọn ngày 1/1/1, nhưng trong thực tế trên máy tính thì người ta chọn 1/1/1900 cho dễ)
-Mảng tháng cho biết từ ngày 1/1 đến ngày 1/tháng đã trải qua thời gian bao nhiêu
-Dòng
int temp=ngay+songaydenthang[thang]+(nam-1)*(365%7);tính từ ngày 1/1/1 đến ngày cần tính đã trải qua bao nhiêu ngày nếu không có luật năm nhuận
-Dòng
temp+=(nam-1)/4-3*nam/400;tính cộng thêm số ngày nhuận, cụ thể là từ số năm ta tính được số năm nhuận giửa 2 mốc thời gian. Xem luật số nhuận thì sẻ rỏ thôi mà
-Dòng
if(nhuan(nam)&&(thang>2))temp++;xét luật về năm nhuận cho năm hiện tại
Edited by quanghoa, 06-05-2009 - 21:24.
#4
Posted 06-05-2009 - 20:22
có công thức này:
$s=n+[\dfrac{n-1}{400}]-[\dfrac{n-1}{100}]+[\dfrac{n-1}{4}]+x$
x là số thứ tự của ngày đó trong năm
thứ=s%7 (số dư khi chia s cho 7)(quên cách viết trong Pascal rồi, nhớ mỗi C,C++)
$s=n+[\dfrac{n-1}{400}]-[\dfrac{n-1}{100}]+[\dfrac{n-1}{4}]+x$
x là số thứ tự của ngày đó trong năm
thứ=s%7 (số dư khi chia s cho 7)(quên cách viết trong Pascal rồi, nhớ mỗi C,C++)
#5
Posted 06-05-2009 - 21:26
Một phần của cái trên kia tui làm. (Trong PASCAL là s mod 7 )có công thức này:
$s=n+[\dfrac{n-1}{400}]-[\dfrac{n-1}{100}]+[\dfrac{n-1}{4}]+x$
x là số thứ tự của ngày đó trong năm
thứ=s%7 (số dư khi chia s cho 7)(quên cách viết trong Pascal rồi, nhớ mỗi C,C++)
#6
Posted 06-05-2009 - 22:12
Tiếp tục luận, có công thức ngắn này
$
thu=ngay+2*thang+3 \dfrac{thang+1}{5} +nam+ \dfrac{nam}{4} +1-3* \dfrac{nam}{400};
$
sau đó chia lấy dư cho 7
Hiểu không, không à, tui cũng không hiểu, Vớ đựoc trên mạng thôi, à chỉnh lại chút
$
thu=ngay+2*thang+3 \dfrac{thang+1}{5} +nam+ \dfrac{nam}{4} +1-3* \dfrac{nam}{400};
$
sau đó chia lấy dư cho 7
Hiểu không, không à, tui cũng không hiểu, Vớ đựoc trên mạng thôi, à chỉnh lại chút
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users