Cần giúp đỡ về bài tập xác định can chi (năm con gì) khi nhập vào 1 năm

Mình có đang muốn thử xây dựng một chương trình để khi nhập vào đó một năm bất kì (giới hạn hạn từ năm 0 đến năm 9999) thì sẽ cho ra kết quả đó là năm con gì. Mình đã tìm hiểu được cách xác định can chi ( năm con gì) là:

  • Xác định can dựa vào số cuối của năm đó:
0 1 2 3 4 5 6 7 8 9
Canh Tân Nhâm Quý Giáp Ất Bính Đinh Mậu Kỷ
  • Cách xác định CHI thì đầu tiên lấy 2 chữ số đầu tiên chia cho 3 lấy dư .Nếu dư 0 thuộc bảng 0, dư 1 thuộc bảng 1, dư 2 thuộc bảng 2 .Sau đó lấy 2 số sau chia cho 12 ta lấy phần dư và so sánh vào bảng tương ứng

Bảng số 0:

0 1 2 3 4 5 6 7 8 9 10 11
Thân Dậu Tuất Hợi Sửu Dần Mão Thìn Tỵ Ngọ Mùi

Bảng số 1

0 1 2 3 4 5 6 7 8 9 10 11
Sửu Dần Mão Thìn Tỵ Ngọ Mùi Thân Dậu Tuấn Hợi

Bảng số 2

0 1 2 3 4 5 6 7 8 9 10 11
Thìn Tỵ Ngọ Mùi Thân Dậu Tuất Hợi Sửu Dần Mão

Ví dụ : Năm 1642 ta chia làm 2 phần 16 và 42 . Trước tiên ta lấy 2 số đầu ( ở đây là số 16 ) chia cho 3 có số dư là 1 vậy kết quả sẽ nằm ở bảng số 1 sau đó lấy 2 số sau ( ở đây là số 42 ) chia cho 12 ta có số dư là 6 . Tra Kết quả ta thấy số 6 ứng với ngọ Vậy năm 1642 là năm nhâm ngọ

Mình chưa biết code thế nào để chương trình lấy 2 số đầu và 2 số cuối số theo công thức bên trên để khi hoàn thiện chương trình ta nhập vào một năm và cho ra kết quả can chi (năm đó là năm con gì) mong mọi người giúp đỡ

Về tính Can thì không vấn đề gì. :slight_smile:

Còn tính Chi sao phải làm vậy cho vất ra. Chỉ cần chọn một năm làm mốc (nên chọn năm tý cho dễ tính) rồi lấy mod 12 đem so với bảng 1 là xong. :slight_smile:

Spoiler

Chi = (năm - 1995 < 0) * 12 + (năm - 1995) % 12.

5 Likes

Cơ bản là chia lấy dư thôi.
Can năm % 10.
Chi năm % 12.
Việc gì phải tách số rồi chia dư và tra bảng khổ thế!

7 Likes

Bài này mình vừa làm vài tuần trước. Chỉ đơn giản là mình cho chi=nam%12 rồi xét 12 trường hợp của chi bằng lệnh switch case. Ví du: 2019%12=3 thì xuất “hoi”. Can cũng tương tự can=nam%10. Còn muốn biết rõ các trường hợp ra gì thì chỉ cần chọn một năm làm mốc rồi tăng giảm. Không rõ có cách nào đơn giản hơn không nhưng đây là cách làm của mình. Mong mọi người góp ý.

2 Likes

Dùng mảng chuỗi để truy xuất xem ra ổn hơn.

// Từ đơn trong tiếng Việt có tối đa 7 chữ cái: Nghiêng => 7 (không dấu) + 1 null = 8. Dư cho chắc :D
char CAN[10][8] = {"Giap", "At", "Binh", "Dinh", "Mau", "Ky", "Canh", "Tan", "Nham", "Quy"};
char CHI[12][8] = {"Ty", "Suu", "Dan", "Mao", "Thin", "Ty", "Ngo", "Mui", "Than", "Dau", "Tuat", "Hoi"}; // Tý = Tỵ.
int canx = 6, chix = 8, nam = 1942;
// scanf("%d", &nam);
char* can = CAN[(nam + canx) % 10];
char* chi = CHI[(nam + chix) % 12];
printf("%s %s", can, chi);
4 Likes

Cách xác định = việc chia lấy dư như mấy bạn trên đã hướng dẫn là đúng rồi. Nhanh gọn lẹ.

2 số đầu = năm / 100;
2 số cuối = năm % 100;

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?