Bước tới nội dung

Lời giải

Tủ sách mở Wikibooks

Đề bài: Viết chương trình giải bài toán sau:

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 có bao nhiêu con mỗi loại?

Lời giải 1

[sửa]
#include <iostream>
using namespace std;

int main () {
    int ga, cho;
   
    for (cho = 1 ; cho < 36 ; cho++) {
        ga = 36 - cho;
        if (ga*2 + cho*4 == 100) {
            cout << "So ga = " << ga << endl;
            cout << "So cho = " << cho << endl;
        }
    }

    return 0;
}

Lời giải 2

[sửa]

Sử dụng duy nhất biến i biểu thị số lượng con gà:

#include <iostream>
using namespace std;

int main () {
    for (int i = 1 ; i < 36 ; i++)
        if (4*(36-i) + 2*i == 100) {
            cout << "So ga = " << i << endl;
            cout << "So cho = " << 36 - i << endl;
        }

    return 0;
}

Cũng là sử dụng duy nhất biến i, nhưng biểu thị số chó thay vì số gà:

#include <iostream>
using namespace std;

int main () {
    for (int i = 1 ; i < 25 ; i++)
        if (4*i + 2*(36-i) == 100) {
            cout << "So ga = " << 36 - i << endl;
            cout << "So cho = " << i << endl;
        }

    return 0;
}

Hai lời giải này về cơ bản không khác gì nhau, tuy nhiên có đôi chút khác ở điều kiện dừng vòng lặp (dòng 5). Ở lời giải trên, ta cho kiểm tra số lượng gà từ 1 đến 35. Ở lời giải dưới, ta kiểm tra số lượng chó từ 1 đến 24 thì dừng. Tại sao chỉ chạy đến 24 mà không chạy đến 35 như số gà? Với tổng số chân của cả 2 loài bằng 100, ta có thể thấy số lượng chó nhiều nhất chỉ có thể là 24. Điều này giúp tối ưu vòng lặp hơn 1 chút, tuy nhiên bạn vẫn có thể cho số lượng chó chạy từ 1 đến 35.