30/09/2018, 23:34

Giúp đỡ bài tập C++

nhập vào nam và in ra những tháng bắt đầu từ thứ 2. anh/chị giúp e với e k có ý tưởng nào ạ. :(((

Phước Hữu Lưu viết 01:49 ngày 01/10/2018

Trước tiên chọn một năm làm mốc start. Chương trình của bạn sẽ tính các năm >= năm này.
Ví dụ Chọn năm 1 SCN, ngày 01/01/0001 là thứ 2.
Khi người dùng nhập vào năm xxxx.
+, tính xem giữa năm x và năm mốc có bao nhiêu năm nhuận ( ví dụ có a năm nhuận ) chú ý nếu xxx là năm nhuận thì không tính nó ( xét riêng bên dưới )
+, tìm xem ngày 01/01/xxxx là thứ mấy ( (365 * (xxxx - 1) + a) là số ngày, chia lấy dư cho 7 là tìm được thứ )
+, Gọi n = Sum( Số ngày tháng 1 -> tháng n) , chia lấy dư cho 7 tìm ra thứ của ngày 01/0n. ( chú ý xét tháng 2 cho năm nhuận )
+, lưu trữ các tháng trên và in ra .

Нгок Бик viết 01:44 ngày 01/10/2018

"anh giải thích giúp em đoạn này lại được k ạ e vẫn không hiểu lắm ạ :“tìm xem ngày 01/01/xxxx là thứ mấy ( (365 * (xxxx - 1) + a) là số ngày, chia lấy dư cho 7 là tìm được thứ )”

Phước Hữu Lưu viết 01:39 ngày 01/10/2018

số ngày chênh lệch giữa năm 0001 và 0002 là 365, năm 0003 là 365*2 , … do có năm nhuận nên số ngày này cộng thêm a năm nhuận ( mỗi năm mhuận tăng 1 ngày là 366)
tìm được số ngày này, chia lấy dư cho 7 ( số ngày 1 tuần ) thu được : dư 0 thì 01/01 là thứ 2, dư 1 là thứ 3,…

Нгок Бик viết 01:44 ngày 01/10/2018
#include <iostream>
#include < conio.h>
using namespace std;
int main()
{ 
	int nam;
	
	cout <<" nhap vao so nam: ";
	cin >> nam;
	int cot = 0;
	if(nam < 325)
	{
		if(nam%4 ==0)
		{
			cot = 366;
		}
		else
		{
			cot = 365;
		}
	}
	else
	{
		if(nam%4 == 0 && ((nam%100 == 0)&&(nam%400 !=0)))
		{
			cot = 366;
		}
		else
		{
			cot = 365;
		}
		int b = (((nam-1)%7)*365)+ ((nam-1)*4);
		int a[12];
		if(cot == 365)
		{
			
			a[0] = b +1;
			a[1] = b + 31 +1;
			a[2] = b + 31 + 28 +1;
			a[3] = b + 31 + 28 + 31 +1;
			a[4] = b + 31 + 28 + 31 + 30 +1;
			a[5] = b + 31 + 28 + 31 + 30 + 31 + 1;
			a[6] = b + 31 + 28 + 31 + 30 + 31 + 30 + 1;
			a[7] = b + 31 + 28 + 31 + 30 + 31 + 30 + 31 +1;
			a[8] = b + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 1;
			a[9] = b + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 1;
			a[10]= b + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 1;
			a[11]= b + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 1;
			
		}
			if(cot ==366)
			{
				a[0] = b +1;
				a[1] = b + 31 +1;
				a[2] = b + 31 + 29 +1;
				a[3] = b + 31 + 29 + 31 +1;
				a[4] = b + 31 + 29 + 31 + 30 +1;
				a[5] = b + 31 + 29 + 31 + 30 + 31 + 1;
				a[6] = b + 31 + 29 + 31 + 30 + 31 + 30 + 1;
				a[7] = b + 31 + 29 + 31 + 30 + 31 + 30 + 31 +1;
				a[8] = b + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 1;
				a[9] = b + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 1;
				a[10]= b + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 1;
				a[11]= b + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 1;
				
			}
			
			for( int i = 0; i <=11 ; i++)
			{
				int L = 0;
				if( a[i]%7 == 1)
				{
					L = L + 1;
					cout << L;
				}
				system ("pause");
			}
			
		}
	}
Нгок Бик viết 01:35 ngày 01/10/2018

em bị sai phần lôgic. anh có thể xem giúp em được không ạ ((

Trọng Nghĩa viết 01:47 ngày 01/10/2018

Xét bài toán trên đơn giản tí: In số năm bắt đầu bằng thứ hai. Ta cần 2 hàm:

  1. Check năm nhuận
    2. Chạy lặp từ năm 1, cứ mỗi năm thì cộng số ngày của năm trước. Nếu tổng đấy mà %7 == 1 thì đó là năm cần tìm.

Áp dụng tương tự sẽ làm được bài tìm tháng.

P/s: Ngày 1-1-1 là chủ nhật

Bài liên quan
0