Chuyển đến nội dung chính

Lời giải cho bài toán "tìm ngày sinh nhật" gây điên đảo cộng đồng mạng

Mới đây trên mạng xã hội Facebook tại Singapore đã xuất hiện những tranh luận xung quanh một bài toán cực kỳ hại não. Bài toán được đăng tải bởi Kenneth Kong trên trang Facebook cá nhân của anh và nó đã có tới gần 3.000 lượt chia sẻ tính từ hôm thứ 7 vừa qua.

Kenneth Kong cho biết bài toán này đã khiến anh và vợ mình tranh luận không ngừng mà vẫn chưa tìm ra được lời giải.


Bài toán này có nội dung như sau:

Albert và Bernard là hai người bạn mới của Cheryl. Cả hai muốn biết ngày sinh nhật của Cheryl. Cheryl sau đó đã đưa ra 10 đáp án như sau: Ngày 15/5, Ngày 16/5, Ngày 19/5, Ngày 17/6, Ngày 18/6, Ngày 14/7, Ngày 16/7, Ngày 14/8, Ngày 15/8, Ngày17/8.

Cheryl sau đó đã tiết lộ riêng biệt với Albert và Bernard về tháng và ngày sinh nhật của mình. (Tức là Albert chỉ biết tháng sinh, trong khi Bernard chỉ biết ngày sinh).

Albert: "Tớ không biết ngày sinh nhật của Cheryl, nhưng tớ biết Bernard cũng không biết".

Bernard: "Trước đây thì tớ không biết ngày bạn ấy sinh, nhưng giờ thì tớ biết rồi".

Albert: "Vậy thì bây giờ tớ đã biết ngày sinh nhật của Cheryl".

Theo các bạn, Cheryl sinh nhật vào ngày nào?

Hãy dừng lại và suy nghĩ chút đỉnh trước khi đọc lời giải dưới đây:

Trong số 10 đáp án được đưa ra, từ ngày 14 tới 19 các tháng, chỉ có ngày 18 và 19 đứng một mình. Vì vậy, nếu Cheryl sinh một trong hai ngày này, cô ấy lại nói cho Bernard ngày sinh thì chắc chắn Bernard có câu trả lời ngay lập tức. Nhưng Bernard ban đầu không biết (Albert khẳng định và sau đó Bernard cũng thừa nhận) nên ngày 19/5 và 18/6 được loại bỏ.


Mấu chốt vấn đề nằm ở câu đầu tiên của Albert. Nếu Cheryl sinh tháng 5 hoặc tháng 6, ngày sinh nhật của cô ấy có thể là 19/5 hoặc 18/6. Trong khi đó, Albert chỉ biết tháng sinh mà dám khẳng định 100% Bernard không biết. Điều đó chứng tỏ tháng sinh Cheryl nói cho Albert không phải tháng 5 hay tháng 6. Tới đây, ta loại được 15/5, 16/5, 17/6.


Sau câu nói của Albert, Bernard lập tức tìm ra kết quả. Do đó, chắc chắn ngày sinh của Cheryl không phải ngày 14 bởi ngày này lặp lại 2 lần trong các đáp án còn lại (14/7 và 14/8). Giờ chỉ còn 3 ngày là 16/7, 15/8, 17/8.


Bernard tìm ra đáp án cũng là lúc Albert tìm ra. Vì sao vậy? Bởi nếu Cheryl nói với Albert tháng sinh là tháng 8 thì vẫn còn 2 ngày là 15/8 và 17/8 nên cậu ta chưa thể tìm ra câu trả lời. Việc Albert giải được bài toán đồng nghĩa tháng sinh của Cheryl là tháng 7.


Đáp án ta có chắc chắn là ngày 16/7.

Bonus: Bài toán này thực ra không dành cho học sinh lớp 5 mà dành cho các em ở độ tuổi 14 - 15. Theo trang web Mothership.sg, đây là một câu hỏi trong cuộc thi SASMO 2015 (Singapore and Asian Schools Math Olympiad) nhằm phân loại khoảng 40% học sinh giỏi nhất. Và nếu bạn nghĩ rằng lời giải trên “hư cấu” thì hãy nhìn tấm ảnh dưới nhé!


Đề thi...

... và lời giải chính thức.

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.