Lập trình Scratch đếm các số tự nhiên thỏa mãn điều kiện
Trong bài viết này ta cùng Lập trình Scratch đếm các số tự nhiên thỏa mãn điều kiện nào đó, ta hãy cụ thể hóa bài toán như sau:
Bài toán: Em hãy lập trình đếm số lượng các số tự nhiên có 4 chữ số và tổng các chữ số của nó là 10
Ý tưởng 1: Lập trình Scratch đếm các số tự nhiên thỏa mãn điều kiện
Ta có thể suy nghĩ bài toán theo hướng như sau:Vì bài toán yêu cầu đếm các số tự nhiên có 4 chữ số và thỏa mãn thêm điều kiện tổng các chữ số bằng 10 nên ta có thể nghĩ đến việc kiểm tra tất cả các số tự nhiên từ 1000 đến 9999 xem số nào thỏa mãn điều kiện thì liệt kê ra.
Lập trình trong Scratch
Bước 1: Xây dựng mảnh ghép tính tổng các chữ số của một số tự nhiên
Ta tạo mảnh ghép “Tổng các chữ số” với tham số n với ý nghĩa “Tính tổng các chữ số của số tự nhiên n” và lập trình như sau
Giải thích một chút khối lệnh trên: Biến “Tổng” có nhiệm vụ cho kết quả là tổng các chữ số của số tự nhiên n, đầu tiên “tổng” được khởi động bằng 0 sau đó cộng gom lần lượt các chữ số của n từ trái sang phải.
Tiếp theo tạo khối lệnh chính như sau:
Biến “đếm” để đếm số lượng các số thỏa mãn điều kiện, đầu tiên “Đếm” = 0. Khối lệnh trên sẽ lần lượt thử từng số từ 1000 đến 9999, nếu số nào có “tổng các chữ số bằng 10 thì tăng “đếm” lên 1.
Chạy chương trình ta được kết quả như sau:
Như vậy có 219 số thỏa mãn điều kiện “là số tự nhiên có 4 chữ số và tổng các chữ số bằng 10”
Bây giờ nếu ta muốn xuất danh sách các số tìm được ra một mảng để nhìn xem liệu chương trình chạy đúng hay không ta hãy tạo thêm một “danh sách” và chèn thêm vào khối lệnh chính để được khối lệnh sau:
Bây giờ bạn hãy chạy thử xem kết quả nào
Nhận xét: Cách làm trên là cách duyệt tất cả các số có 4 chữ số và kiểm tra xem số nào thỏa mãn điều kiện thì lấy. Cách làm này có ưu điểm là dễ hiểu, nhưng chương trình sẽ chạy chậm vì chưa tối ưu vì phải thử tới 9999 – 1000 + 1 = 9000 lần.
Ý tưởng 2: Lập trình Scratch đếm các số tự nhiên có 4 chữ số thỏa mãn điều kiện
Ta cũng có thể giải quyết bài toán trên như sau:
- Gọi số tự nhiên có 4 chữ số là abcd
- Ta sẽ có a nhận các giá trị từ 1 đến 9
- b,c,d: Nhận các giá trị từ 0 đến 9
Như vậy mình có thể dùng 4 biến a, b, c, d sau đó sử dụng 4 vòng lặp cho a duyệt từ 1 -> 9, b,c,d duyệt từ 0 -> 9 quét tất cả các trường hợp để kiểm tra.
Nếu thực hiện như trên thì số lần kiểm tra cũng giống như ý tưởng 1 mà thôi.
Ta có thể giảm bớt số lần duyệt bằng cách tối ưu như sau:
- Cho a duyệt từ 1 đến 9
- Cho b duyệt từ 0 đến (10 – a) (bởi tổng các chữ số bằng 10, nên giả sử a = 7 rồi thì chỉ cần duyệt b tối đa đến 10 – 7 = 3 mà thôi)
- Cho c duyệt từ 0 đến (10 – a – b)
- Cho d duyệt từ 0 đến (10 – a – b – c)
Các bạn có thêm ý tưởng nào cùng comment chia sẻ nào!