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
Bắt đầu bởi chocuong21, 09-12-2007 - 16:39
#1
Đã gửi 09-12-2007 - 16:39
#2
Đã gửi 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
Bài viết đã được chỉnh sửa nội dung bởi math_galois: 09-12-2007 - 18:01
#3
Đã gửi 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
Bài viết đã được chỉnh sửa nội dung bởi quanghoa: 06-05-2009 - 21:24
#4
Đã gửi 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
Đã gửi 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
Đã gửi 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 người đang xem chủ đề
0 thành viên, 1 khách, 0 thành viên ẩn danh