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

2
194

Bài toán: Tìm số chẵn/lẻ lớn 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í chẵn/lẻ đầ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ố chẵn 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ị chẵn/lẻ và giá trị chẵn/lẻ  lớn hơngiá trị chẵn/lẻ đầ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ị chẵn/lẻ lớn nhất

Output: ma trận không có giá trị chẵn,lẻ -1, giá trị chẵn/lẻ lớn nhất

Hàm Tìm chẵn lớn nhất

int ChanMax(int a[][MAX], int m, int n)
{
	int i,j,d,c,vtd,vtc,e,max;
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(a[i][j]%2==0)
			{
				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=vtc;j<n;j++)
		{
			if(a[i][j]%2==0 && a[i][j]>max)
			{
				max=a[i][j];
			}
		}
	}
	return max;
}

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

int LeMax(int a[][MAX], int m, int n)
{
	int i,j,d,c,vtd,vtc,e,min;
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(a[i][j]%2!=0)
			{
				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=vtc;j<n;j++)
		{
			if(a[i][j]%2!=0 && a[i][j]>max)
			{
				max=a[i][j];
			}
		}
	}
	return max;
}

Chương trình chẵn lớn nhất trong ma trận

#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 ChanMax(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(ChanMax(a,m,n)==-1)
		printf("\nMang khong co so chan ");
	else
		printf("\nSo chan lon nhat la: %d",ChanMax(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 ChanMax(int a[][MAX], int m, int n)
{
	int i,j,d,c,vtd,vtc,e,max;
	for( i=0;i<m;i++)
	{
		for( j=0;j<n;j++)
		{
			if(a[i][j]%2==0)
			{
				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=vtc;j<n;j++)
		{
			if(a[i][j]%2==0 && 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!

2 COMMENTS

    • nếu duyệt hết ma trận mà không tìm thấy thì lúc đó i tăng lên = m, và j =n. cách này cũng được hoặc là em dùng kỹ thuật cờ hiệu

LEAVE A REPLY

Please enter your comment!
Please enter your name here

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