Tìm số nguyên tố lớn/nhỏ nhất trong ma trận

2
4827

Bài toán: Tìm số nguyên tố lớn/nhỏ nhất trong ma trận

Input: mảng a có m dòng, n cột

Xử lý: duyệt mảng, tìm vị trí số nguyên tố lớn/nhỏ đầu tiên trong mảng

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

Nếu duyệt hết mảng mà không tìm được số nguyên tố lớn/nhỏ thì trả về giá trị -1

Duyệt mảng từ dòng +1, cột giữ nguyên vị trí tìm được ở trên

Nều là giá trị số nguyên tố lớn/nhỏ và giá trị số nguyên tố lớn/nhỏ hơngiá trị số nguyên tố lớn/nhỏ đầu tiên thì cập nhật lại giá trị vừa tìm được, duyệt đến hết mảng sẽ tìm được giá trị số nguyên tố lớn/nhỏ nhất

Output: ma trận không có số nguyên tố -1, giá trị nguyên tố lớn/nhỏ nhất

Hàm tìm SNT lớn nhất

int SNTMax(int a[][MAX], int m, int n)
{
	int i,j,d,c,vtc,vtd,e,max;
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(SNT(a[i][j])==1)
			{
				d=i;
				c=j;
				e=a[i][j];
				break;
			}
		}
	}
	if(i==m && j==n)
		return -1;
	vtd=d;
	vtc=c;
	max=e;
	for( i=vtd+1;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(SNT(a[i][j])==1 && a[i][j]>max)
			{
				max=a[i][j];
			}
		}
	}
	return max;
}

Hàm tìm SNT nhỏ nhất

int SNTMin(int a[][MAX], int m, int n)
{
	int i,j,d,c,vtc,vtd,e,max;
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(SNT(a[i][j])==1)
			{
				d=i;
				c=j;
				e=a[i][j];
				break;
			}
		}
	}
	if(i==m && j==n)
		return -1;
	vtd=d;
	vtc=c;
	min=e;
	for( i=vtd+1;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(SNT(a[i][j])==1 && a[i][j]<min)
			{
				min=a[i][j];
			}
		}
	}
	return min;
}

 

Chương trình tìm SNT lớn nhất

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 100
void nhapmang(int a[][MAX], int &m, int &n);
void xuatmang(int a[][MAX], int m, int n);
int SNT(int n);
int SNTMax(int a[][MAX], int m, int n);
void main()
{
	int a[MAX][MAX], m,n;
	nhapmang(a,m,n);
	printf("\nNoi dung cua ma tran\n");
	xuatmang(a,m,n);
	if(SNTMax(a,m,n)==-1)
		printf("\nMang khong co so nguyen to ");
	else
		printf("\nSo nguyen to lon nhat la: %d",SNTMax(a,m,n));
	getch();
}
void nhapmang(int a[][MAX], int &m, int &n)
{
	int i,j;
	do
	{
		printf("nhap vao so dong cua ma tran: ");
		scanf("%d",&m);
	}while(m<=0);
	do
	{
		printf("nhap vao so cot cua ma tran: ");
		scanf("%d",&n);
	}while(n<=0);
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			printf("\nSo phan tu a[%d][%d]: ",i,j);
			scanf("%d",&a[i][j]);
		}
	}
}
void xuatmang(int a[][MAX], int m, int n)
{
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%5d",a[i][j]);
		}
		printf("\n");
	}
}
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 SNTMax(int a[][MAX], int m, int n)
{
	int i,j,d,c,vtc,vtd,e,max;
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(SNT(a[i][j])==1)
			{
				d=i;
				c=j;
				e=a[i][j];
				break;
			}
		}
	}
	if(i==m && j==n)
		return -1;
	vtd=d;
	vtc=c;
	max=e;
	for( i=vtd+1;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(SNT(a[i][j])==1 && a[i][j]>max)
			{
				max=a[i][j];
			}
		}
	}
	return max;
}

 

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 các bạn thành công!

Xem thêm: Tìm số chẵn/lẻ lớn nhất trong ma trận

2 COMMENTS

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