Nhờ giải thích lỗi sai

Em mới học C, đây là bài tìm Số nguyên tố max trong mảng và in ra vị trí của nó, tất cả đều chạy đúng còn riêng phần in ra vị trí thì sai ạ. Còn bên dưới là code của bạn em, đã in ra vị trí đúng. Mn có thể chỉ ra em sai ở đâu không ạ.
Code của e:

void ntmax_cc(int *a,int n)
{
	int i,dem=0,max,vt;
	for(i=0;i<n;i++)
	if(ktnt(*(a+i))==1)
	{
		max=*(a+i);
		dem++;
	}
	if(dem!=0)
	{
		for(i=0;i<n;i++)
		{
			if(ktnt(*(a+i))==1&&*(a+i)>max)
			{
				max=*(a+i);
				vt=i;
			}
		}
			printf("\nPhan tu nguyen to max cc la: %d",max);
			printf("\nVi tri nguyen to max cc la: %d",vt);
		
	}	
	else printf("\nMang ko co snt.");
}

Của bạn em:

void ntmax_cc(int *a,int n)
{
	int i,dem=0,max,ntmaxcc,vt;
	for(i=0;i<n;i++)
	if(ktnt(*(a+i))==1)
	{
		max=*(a+i);
		dem++;
	}
	for(i=0;i<n;i++)
	if(ktnt(*(a+i))==1&&*(a+i)>max)
	max=*(a+i);
	if(dem!=0)
	{
		for(i=0;i<n;i++)
		if(*(a+i)==max)
		{
			ntmaxcc=*(a+i);
			vt=i;
		}
		printf("\nPhan tu nguyen to max cc la: %d",ntmaxcc);
		printf("\nVi tri nguyen to max cc la: %d",vt);
	}
	else
	printf("\nMang ko co snt.");
}
1 Like

Bỏ qua việc cả 2 đoạn mã khá là “gồ ghề” với 2->3 vòng lặp không cần thiết.

Bạn sai ở việc so sánh *(a+i)>max. Giả sử ở vòng lặp đầu đã lấy được giá trị lớn nhất rồi, đến đây thì lệnh trong if không bao giờ được thực hiện. Vì không có giá trị nào còn có thể lớn hơn giá trị lớn nhất (kể cả chính nó).

5 Likes

à vâng, em vừa sửa lại điều kiện chỗ đấy là if(ktnt(*(a+i))==1&&*(a+i)>=max) thì ra kết quả đúng rồi ạ, e cám ơn

Đặt tên biến ntmaxcc có nghĩa là j vậy.
Nt là nguyên tố, max là lớn nhất thì biết r.
Còn cc là j.
Bạn có thể hướng dẫn mk code dk k

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