Nhập ngày tháng năm và xác định đó là thứ mấy.

Thảo luận trong 'C/C++' bắt đầu bởi LieuKyThien, 4 Tháng tám 2009.

  1. Offline

    LieuKyThien

    • Thành Viên Mới

    Số bài viết:
    79
    Đã được thích:
    49
    Điểm thành tích:
    0
    vì jinyotino yêu cầu mình post đề bài rồi từ từ post bài giải nên lần này sẽ khác.
    Yêu cầu bài toán: nhập ngày tháng năm sau đó xác định thứ mấy. Biết rằng ngày 01/01/1 là chủ nhật.
    Gợi ý: từ dữ liệu nhập vào ta tính ra tổng ngày là bao nhiêu rồi đem chia lấy dư cho 7. nếu dư bao nhiêu thì đó là thứ cần tìm.
    VD:
    ngày 20/08/2009 là mình ra.
    Vậy thì bước 1 ta tính số ngày trong 7 tháng cộng với 20 ngày của tháng 8 vậy ta được ngay=31+28+31+30+31+30+31+20=232. Xong bước 1.
    tới bước 2: tính số ngày "thừa" của những năm nhuần ta tính như sau: lấy dữ liệu năm chia lấy dư cho 4 ta được số ngày "thừa". 2009 mod 4 = 502. Cộng thêm cho số ngày vừa nãy ngay+=502
    =>ngay=734.
    bước 3: ta tính số ngày từ năm 1 đến năm 2008 là bao nhiêu bằng cách lấy (nam-1)*365=732920
    he he 1 con số hơi to hen nhưng các bạn đừng sợ, số tuy to nhưng máy ta tính còn nhanh hơn nhiều.
    lấy cái số thiệt dài đó đem cộng với ngay ta được ngay+=732920
    =>ngay=733654.
    Cuối cùng lấy ngay mod 7 là xong. ngay%7=5 => thứ 5. Nếu nghi ngờ thì lật lịch sẽ rõ.
    đây chỉ mới là ý tưởng cho nên chưa viết ra. Nếu bạn nào quan tâm thì 2 ngày nữa mình sẽ post lên
    :y11:
    minhtam, sunboylt_forever thích bài này.
  2. Offline

    LieuKyThien

    • Thành Viên Mới

    Số bài viết:
    79
    Đã được thích:
    49
    Điểm thành tích:
    0
    Híc!!! không có một reply nào hết trơn. Mà thôi không sao cả, đây là code của bài này
    Mã:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    	int thang[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,ng,th,nm,temp1=0;
    	char thu[7][10]={"Chu Nhat","Thu Hai","Thu ba","Thu tu","Thu nam","thu sau","Thu bay"};
    	printf("\nNhap ngay thang nam theo dang dd/mm/yyyy: ");
    	scanf("%d/%d/%d",&ng,&th,&nm);
    	for(i=0;i<=th-2;i++)
    		temp1+=thang[i];
    	temp1+=ng+(nm/4)+((nm-1)*365);
    	temp1%=7;
    	for(i=0;i<=6;i++)
    		if(i==temp1)
    			printf("\n%s",thu[i]);
    	getch();
    }
    
    lebinhvhit03asunboy thích bài này.
  3. Offline

    zell

    • Thành Viên Mới

    Số bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    0

    minh copy code về chay thử, nhap 23/9/2010 khong in ra kết quả, nhập 5/12/1987 in sai ngày. cám ơn bạn vì giải thuật bài này ^_^
  4. Offline

    htttk95

    • Thành Viên Mới

    Số bài viết:
    1
    Đã được thích:
    1
    Điểm thành tích:
    0
    bạn gì ơi bạn nên nhớ ko phải năm nào cũng có 365 ngày đâu,năm nhuận có 366 ngày đó,không thể dùng công thức (năm-1)*365 dc
    minhtam thích bài này.
  5. Offline

    tranhait

    • Thành Viên Mới

    Số bài viết:
    51
    Đã được thích:
    8
    Điểm thành tích:
    0
    làm bằng c++ dùm em

    xư uynh ơi! ở trường mình học c++ về cái này mù! uynh làm bằng c++ dc ko?em cảm ơn nhìu! nhanh nhanh dùm em nhé! cũng gần thi òi :((

Chia sẻ trang này

Advertising: Linux system admin