Nested loops and patterns · Vòng lặp lồng nhau và mẫu hình
A loop inside a loop
- You can put one loop inside another. The inner loop runs fully for each step of the outer loop.
- This is how you work with rows and columns, or compare every pair of items.
- If the outer loop runs
Rtimes and the inner runsCtimes, the inner body runsR × Ctimes.
Vòng lặp lồng trong vòng lặp
- Bạn có thể đặt một vòng lặp bên trong một vòng lặp khác. Vòng lặp chạy đầy đủ cho mỗi bước của vòng lặp ngoài.
- Đây là cách bạn xử lý các hàng và cột, hoặc so sánh mọi cặp mục.
- Nếu vòng lặp ngoài chạy
Rlần và vòng lặp trong chạyClần, thân của vòng lặp trong sẽ chạyR × Clần.
Rows and columns
- Think of the outer loop as the row and the inner loop as the column.
- For a block of
*, the outer loop picks a row; the inner loop prints the stars in that row. - After the inner loop finishes a row, print a newline
\nto start the next row.
Hàng và cột
- Hãy nghĩ về vòng lặp ngoài là hàng và vòng lặp trong là cột.
- Đối với một khối
*, vòng lặp ngoài chọn một hàng; vòng lặp trong in ra các ngôi sao trong hàng đó. - Sau khi vòng lặp trong kết thúc một hàng, in một ký tự xuống dòng
\nđể bắt đầu hàng tiếp theo.
Building a line, then a block
printf("*")prints one star without moving to a new line.- Print all the stars for one row first, then one
printf("\n")to end the row. - Repeat for every row, and the rows stack into a block.
Xây dựng một dòng, sau đó là một khối
printf("*")in ra một ngôi sao không chuyển sang dòng mới.- In tất cả các ngôi sao cho một hàng trước, sau đó in một
printf("\n")để kết thúc hàng. - Lặp lại cho mỗi hàng, và các hàng sẽ xếp chồng lên nhau thành một khối.
#include <stdio.h>
int main(void) {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
printf("*");
}
printf("\n"); // end the row
}
return 0;
}
Counting with nested loops
- Nested loops also count pairs. To count pairs
(i, j)withi < j, start the inner loop ati + 1. - A counter inside the inner loop adds up the matches.
- Watch the start and end values — off-by-one mistakes are common here.
Đếm bằng vòng lặp lồng nhau
- Vòng lặp lồng nhau cũng đếm các cặp. Để đếm các cặp
(i, j)vớii < j, hãy bắt đầu vòng lặp trong tạii + 1. - Bộ đếm bên trong vòng lặp trong sẽ cộng dồn các sự trùng khớp.
- Hãy chú ý đến giá trị bắt đầu và kết thúc — sai lệch một đơn vị (off-by-one) rất phổ biến ở đây.
Common mistakes
- The inner loop runs fully for each single turn of the outer loop.
- Check the bounds so a pattern has no extra or missing row.
Lỗi thường gặp
- Vòng lặp trong chạy đầy đủ cho mỗi lần quay của vòng lặp ngoài.
- Kiểm tra các giới hạn để đảm bảo mẫu không có hàng thừa hay thiếu.
Now you try
- Use an inner
printfwithout\nto build a row, then aprintf("\n")to end it. - For the function task, do not write a
main— the checker provides one.
Bây giờ bạn thử
- Sử dụng một
printfbên trong mà không có\nđể xây dựng một hàng, sau đó dùng mộtprintf("\n")để kết thúc nó. - Đối với nhiệm vụ hàm, đừng viết một
main— bộ kiểm tra sẽ cung cấp một cái.
In main, use nested loops to print a 3×3 block of * — three stars on each of three lines. · Trong main, sử dụng vòng lặp lồng nhau để in một khối 3×3 gồm các * — ba dấu sao trên mỗi trong ba dòng.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
In main, print a left-aligned triangle of * that is 4 rows tall: row 1 has one *, row 2 has two, up to row 4 with four. · Trong main, in một tam giác căn trái của * cao 4 hàng: hàng 1 có một *, hàng 2 có hai, cho đến hàng 4 có bốn.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Complete int count_pairs(int n) so it returns how many pairs (i, j) satisfy 1 <= i < j <= n. Use nested loops (start the inner loop at i + 1). Do not write a main. · Hoàn thành int count_pairs(int n) sao cho nó trả về số lượng cặp (i, j) thỏa mãn 1 <= i < j <= n. Sử dụng vòng lặp lồng nhau (bắt đầu vòng lặp bên trong từ i + 1). Không viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.