2 vòng lặp lồng vào nhau

e ko hiểu rõ lắm về cách vòng lặp lồng vào nhau mong anh chị chỉ giáo

Câu hỏi của bạn chưa cụ thể lắm, bạn có thể ví dụ bài nào bạn chưa hiểu hay chưa hiểu chỗ nào thì mọi người mới giúp được chứ

#include<stdio.h>
#include<math.h>
int main()
{
	int x, n, gt=1;;
	float s=0;
	printf("nhap x:\n");
	scanf("%d",&x);
	printf("nhap n:\n");
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		
			gt=1;
		for(int j=1;j<=i;j++)
			gt=gt*j;
			s=s+(pow(x,i))/gt; 
				
	}
	printf("tong giai thua la:%f\n",s);

Không hiểu như thế nào vậy bạn?

for(int i=1;i<=n;i++) // cho i chạy từ 1 tới n, giả sử n =2 nhé
{
  gt=1; //khởi tạo gt = 1
  for(int j=1;j<=i;j++) // cho j chạy từ 1 tới i, vậy lần đầu nó chạy từ 1->1, lần 2 chạy từ 1->2
   { 
      gt=gt*j; //tính ra gt, ví dụ ở lần 2, nó tiếp tục chạy 2 vòng lặp nhỏ, lần 1 gt = 1*1, lần 2 sẽ bằng gt=1*2
                  //đại khái tính ra số giai thừa, lần 1 là 1!, lần 2 là 2!, .... 
   } //thoát khỏi vòng tính giai thừa (biến j)
 s=s+(pow(x,i))/gt; //tính tổng theo 2 vòng lặp, lần 1 là 1+(x mũ 1/1!)
                           //lần 2 sẽ là 1 +  (x mũ 1/1!) + (x mũ 2)/2!
}

Vậy bài toán này tính 1 tổng, trong đó các số hạng trong tổng cần phải tính giai thừa.

giống như là mỗi vòng lập chạy như thế nào á bạn @@

ủa để gt=1 ngoài vòng for ko dc hả bạn @@

Cái này bạn vẽ lược đồ (flow diagram) sẽ hiểu. gt đặt ngoài thì nó lại tính ra bài #, để vào trong để reset ấy mà (tất nhiên, để ngoài vẫn được, thuật toán tuy # đi nhưng vẫn ra được kết quả như yêu cầu. Thuật toán ở đây sẽ hơi bị trùng vì:

Tính 2!: vẫn tính từ 1*2
Tính 3!: bị trùng, tính 1*2*3
Tình 4!: vẫn tính từ đầu, 1*2*3*4

anh xem giúp em cái hàm đếm các phần tử cùng là số nguyên tố lớn nhất này của em xem sai ở đâu ạ

//ham dem so phan tu la song nguyen to lon nhat mang
int so_maxnt(int a[], int n)
{
	int i,j,k,m,maxnt,dem = 0;

			for(i = 0 ; i < n; i++)
				if(ktnt(a[i])== 1)
					{
						
						maxnt = a[i];
						for(j = i+1; j< n;j++)
							{
								if(a[j] > maxnt&& ktnt(a[j])==1)
									{
									maxnt = a[j];
									k = j;
									}
							}
						
						for(m = k; m < n; m++)
							if(a[m] == maxnt)
								dem++;
						printf("\n%d la so nguyen to lon nhat trong mang va co %d lan lan lap lai",maxnt, dem);
								
						break;		
								
					
						}
}

A post was split to a new topic: Cần giải thích vòng lặp này

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?