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.
Trang 1Kỹ thuật sử dụng 1 vòng lặp làm việc thay cho 2
vòng lặp
(Code demo bằng C)
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");
Trang 2getch();
}
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:
#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();
Trang 3Như 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;
Trang 4}
for (i=0 ;i<n ; i++)
{
printf("%d \t",arr[i]);
}
getch();
}
Tóm lại: Bài 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