Bài toán: In ra màn hình tam giác dấu '*'
Ví dụ:
*
**
***
****
*****
******
...
Cách giải thường sử dụng:
- Sử dụng 2 vòng lặp
- Vòng lặp đầu tiên sẽ cho duyệt qua các dòng
- Vòng lặp thứ 2 sẽ cho in ra các dấu '*' tương ứng trên mỗi dòng (dòng 1 in 1 dấu, dòng 2 in 2 dấu...)
Code:
#include <stdio.h> #include <conio.h> void main() { int i, j, n=10; clrscr(); for(i=1; i<=n; i++) { for(j=1; j<=i; j++) printf("*"); printf("\n"); } getch(); }
Cách giải sử dụng 1 vòng lặp
- Sử dụng 1 vòng lặp + 2 biến
- Biến đầu tiên dùng để duyệt các dòng
- Biến thứ hai dùng để in ra các dấu '*' trên mỗi dòng
Code:
Ghi chú: Về mặc thực tế thì vòng lặp while cũng giống như vòng lặp for nên 2 cách giải này không phải khác nhau ở chỗ chúng ta sử 2 cấu trúc lệnh khác nhau. (Vì chúng ta có thể thay while(i<=n) bằng for(;i<=n;))
Ví dụ khác: Sắp xếp một mảng theo thứ tự tăng dần.
#include <stdio.h> #include <conio.h> void main() { int i=1, j=1, n=10; clrscr(); while (i<=n) { printf("*"); j++; if(j==i+1) { j=1; i++; printf("\n"); } } getch(); }Như vậy, chúng ta đã sử dụng 1 vòng lặp thay cho 2 vòng lặp nhưng vẫn có thể giải quyết được bài toán đặt ra.
Ghi chú: Về mặc thực tế thì vòng lặp while cũng giống như vòng lặp for nên 2 cách giải này không phải khác nhau ở chỗ chúng ta sử 2 cấu trúc lệnh khác nhau. (Vì chúng ta có thể thay while(i<=n) bằng for(;i<=n;))
Ví dụ khác: Sắp xếp một mảng theo thứ tự tăng dần.
#include <stdio.h> #include <conio.h> void main() { int arr[10]={1,6,8,4,7,8,3,9,2,5},i=0, j=1, tg, n=10; clrscr(); while (i<n-1) { if(arr[i]>arr[j]) { tg= arr[i]; arr[i]= arr[j]; arr[j]= tg; } j++; if(j==n) { i++; j=i+1; } } for (i=0 ;i<n ; i++) { printf("%d \t",arr[i]); } getch(); }Tóm lại: Bài viết này giúp cho các bạn hiểu thêm về cách sử dụng vòng lặp và biết thêm 1 thủ thuật trong lập trình. Còn về mặt nguyên lý hoạt động thì 2 cách này có độ phức tạp như nhau nên cách sử dụng 1 vòng lặp thay cho 2 vòng này không làm cho chương trình chạy nhanh hơn thậm chí còn chậm hơn vì cứ mỗi lần lặp nó lại phải thêm 1 lần kiểm tra giữa 2 biến.
Không có nhận xét nào:
Đăng nhận xét