Tìm vị trí số nguyên tố lớn nhất/nhỏ nhất trong mảng

0
11573

Bài toán:Tìm vị trí số nguyên tố lớn nhất/nhỏ nhất trong mảng

Input:  mảng a có n phần tử

Xử lý: Hàm kiểm tra số nguyên tố

http://sinhvientot.net/so-nguyen-to-la-gi-ham-tim-so-nguyen-to/

Duyệt mảng đê tìm số nguyên tố đầu tiên

Gán vị trí vừa mới tìm được, thoát khỏi vòng lặp

Nếu không có số nguyên tố trong mảng thì trả về -1

Nếu tìm được số nguyên tố thì duyệt từ vị ví số nguyên tố đầu tiên +1 đến hết mảng

Nếu là số nguyên tố và số nguyên tố lớn hơn/nhỏ hơn số nguyên tố đầu tiên thì cập nhật vị trí, duyệt đến hết sẽ tìm được vị trí số nguyên tố lớn nhất/nhỏ nhất

Output: mảng không có số nguyên tố -1, vị trí số nguyên tố lớn nhất/nhỏ nhất trong mảng

Hàm  tìm vị trí số nguyên tố lớn nhất

int VtriSNTLonNhat(int a[], int n)
{
	int vt,d,i;
	for( i=0 ; i<n ; i++ )
		if(SNT(a[i])==1)
		{
			d=i;
			break;
		}
	if(i==n)
		return -1;
	vt=d;
	for(i=vt+1;i<n;i++ )
		if(SNT(a[i])==1 && a[i]>a[vt])
			vt=i;
	return vt;
}

Hàm  tìm vị trí số nguyên tố nhỏ nhất

int VtriSNTNhoNhat(int a[], int n)
{
	int vt,d,i;
	for( i=0 ; i<n ; i++ )
		if(SNT(a[i])==1)
		{
			d=i;
			break;
		}
	if(i==n)
		return -1;
	vt=d;
	for(i=vt+1;i<n;i++ )
		if(SNT(a[i])==1 && a[i]<a[vt])
			vt=i;
	return vt;
}

Chương trình: Tìm vị trí số nguyên tố lớn nhất trong mảng

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define MAX 100
void nhapmang(int a[], int &n);
void xuatmang(int a[], int n);
int SNT(int n);
int VtriSNTLonNhat(int a[], int n);
void main()
{
	int a[MAX],n;
	nhapmang(a,n);
	printf("\nNoi dung cua mang");
	xuatmang(a,n);
	if(VtriSNTLonNhat(a,n)==-1)
		printf("\nTrong mang khong co SNT ");
	else
		printf("\nVi tri SNT lon nhat trong mang la: %d",VtriSNTLonNhat(a,n));
	printf("\nChuc cac ban hoc tot");
	getch();
}
void nhapmang(int a[], int &n)
{
	do
	{
		printf("\nSo phan tu trong mang ");
		scanf("%d",&n);
	}while(n<=0 && n>100);
	for(int i=0 ; i<n ; i++ )
	{
		printf("\nSo phan tu a[%d] la: ",i);
		scanf("%d",&a[i]);
	}
}
void xuatmang(int a[], int n)
{
	for(int i=0 ; i<n ; i++ )
		printf("%4d",a[i]);
}
int SNT(int n)
{
	int dem=0;

	for(int i=1;i<=n;i++)
		if(n%i==0)
			dem++;
	if(dem==2)
		return 1;
	else
		return 0;
}
int VtriSNTLonNhat(int a[], int n)
{
	int vt,d,i;
	for( i=0 ; i<n ; i++ )
		if(SNT(a[i])==1)
		{
			d=i;
			break;
		}
	if(i==n)
		return -1;
	vt=d;
	for(i=vt+1;i<n;i++ )
		if(SNT(a[i])==1 && a[i]>a[vt])
			vt=i;
	return vt;
}

Mình chia sẽ code này đê các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.

Chúc bạn thành công.

Xem thêm: Tìm số chẵn lớn nhất/nhỏ nhất trong mảng

This site uses Akismet to reduce spam. Learn how your comment data is processed.