Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?

Có một bài toán dân gian khá thú vị như sau:

Vừa gà vừa chó
Bó lại cho tròn
Ba mươi sáu(36) con
Một trăm(100) chân chẵn
Hỏi mấy gà, mấy chó?

Đây là bài toán vui, từ khi học tiểu học mình đã biết, lên trung học, học giải phương trình cũng gặp lại nó. Và bây giờ, làm lập trình, tự dưng nhớ tới nó, nên viết ra đây, coi như chia sẻ cho các bạn mới học lập trình có thêm hào hứng, giải quyết các bài tập nho nhỏ, vui vẻ tương tự.

Cách giải nó như sau:

Gọi x là số gà
Số chó là: 36 – x
Số chân gà: 2x
Số chân chó: 4(36-x)
theo đề bài ta có:
2x + 4(36 – x) =100
2x + 144 – 4x = 100
2x = 144 – 100
2x = 44
x = 22
Vậy số gà là 22 con
Số chó : 36 – 22 = 14

Bạn bảo mấy con chó đặt 2 chân trước lên ghế,tổng số chân dưới đất sẽ là 36 x 2  = 72 chân. Suy ra số chân trên ghế là 28 chân.
Vậy có 14 con chó ….

Dùng hệ phương trình
Gọi x là gà, y là chó
Ta có hệ pt:
x + y = 36
2x + 4y = 100
Giải hệ pt
x = 22,y = 14
Vậy gà có 22 con, chó có 14 con. Mời các bạn chia sẻ thêm cách giải hay, thú vị khác nữa nhé.

Vậy thì làm sao để giải nó bằng cách lập trình. Đây không phải vấn đề khó với nhiều bạn, tuy nhiên mình thấy vui vẻ, nên vẫn viết ra đây.

Sau đây là cách giải trong một số ngôn ngữ lập trình như Pascal, C++, C#, Java, PHP, ASP.NET, Javascript. Trường hợp máy bạn không cài sẵn IDE, bạn có thể sử dụng trang web http://ideone.com để chạy thử code.

Vì số con là 36 và số chân là 100. Giả sử tất cả là chó, thì số con tối đa là 100/4 = 25 (con). Tối thiểu là 36 / 4 = 9 (con). Như vậy chúng ta chỉ cần sử dụng vòng lặp for từ 9->25. Tối ưu hơn so với từ 0 -> 36

Pascal


program HelloWorld;
var i :Integer;
begin
   writeln('Giai bai toan dan gian bang Pascal');
writeln('Vua ga vua cho');
writeln('Bo lai cho tron');
writeln('Ba muoi sau(36) con');
writeln('Mot tram(100) chan chan');
writeln('Hoi may ga, may cho?');
for i:= 9 to 25 do
if((i * 2 + (36 - i) * 4) = 100) then
writeln('So ga la: ', i);
writeln('So cho la: ', 36 - i);
end.

C++

#include 
#include;
#include;
using namespace std;
int main(){
cout << "Gia bai toan dan gian trong C++\n";
cout << "Vua ga vua cho\n";
cout << "Bo lai cho tron\n";
cout << "Ba muoi sau(36) con\n";
cout << "Mot tram(100) chan chan\n";
cout << "Hoi may ga, may cho?\n";
cout << "\n";
for (int i = 9; i < 25; i++)
{
if ((i * 2 + (36 - i) * 4) == 100){
cout << "So ga la: " << i << "\n";
cout << "So cho la: " << (36 - i) << "\n";
                        break;
}
}
}

Java

public class Main {
public Main() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Giải bài toán dân gian trong Java");
System.out.println("Vừa gà vừa chó");
System.out.println("Bó lại cho tròn");
System.out.println("Ba mươi sáu(36) con");
System.out.println("Một trăm(100) chân chẵn");
System.out.println("Hỏi mấy gà, mấy chó?\n");
for(int i = 9; i < 25; i++){
if((i*2+(36-i)*4)==100){
System.out.println("Số gà là: " + i);
System.out.println("Số chó là: " + i);
}
}
}
}

C#

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Gia bai toan dan gian trong C#");
            Console.Write("Vua ga vua cho\n");
            Console.Write("Bo lai cho tron\n");
            Console.Write("Ba muoi sau(36) con\n");
            Console.Write("Mot tram(100) chan chan\n");
            Console.WriteLine("Hoi may ga, may cho?\n");
            for (int i = 9; i <= 25; i++)
            {
                if ((2 * i + (36 - i) * 4) == 100)
                {
                    Console.WriteLine("So ga la: " + i);
                    Console.WriteLine("So cho la: " + (36 - i));
                    break;
                }
            }
            Console.ReadKey();
        }
    }

ASP.NET

void GiaiBaiToanDanGian()
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 9; i < 25; i++)
        {
            if ((i * 2 + (36 - i) * 4) == 100)
            {
                sb.AppendLine("Số gà là: " + i);
                sb.AppendLine("Số chó là: " + (36 - i));
            }
        }
        Label1.Text = sb.ToString();
    }

PHP




Bài toán dân gian


Giải bài toán dân gian trong PHP
Vừa gà vừa chó 
Bó lại cho tròn 
Ba mươi sáu(36) con 
Một trăm(100) chân chẵn
Hỏi mấy gà, mấy chó?

'; echo 'Số chó là: '.(36 - $i); } } ?>

Javascript


alert('Giai bai toan dan gian');for(i = 9; i < 25; i++){if((i * 2 + (36-i)*4) === 100){alert('Số gà là: ' + i + '; Số chó là: '+(36-i));}}

Chúc các bạn học lập trình vui vẻ