Tìm số chẵn/lẻ âm nhỏ nhất trong mảng

0
1938

Bài toán:Tìm số chẵn/lẻ âm nhỏ nhất trong mảng

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

Xử lý:  duyệt mảng, tìm vị trí chẵn/lẻ âm đầu tiên trong  mảng

Giữ lại vị trí vừa mới tìm được, roi thoat khỏi vòng lặp

Nếu duyệt hết mảng mà không tìm được số chẵn/lẻ âm thì trả về giá trị -1

Nếu tìm được số chẵn/lẻ  âm thì gán vị trí đó

Duyệt mảng từ vị trí chẵn/lẻ âm +1 đến hết mảng

Nều là giá trị chẵn/lẻ âm và giá trị chẵn/lẻ âm nhỏ hơn giá trị chẵn/lẻ âm đầu tiên tìm được 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ẻ âm nhỏ nhất

Output: mảng không có giá trị chẵn/lẻ âm-1, giá trị chẵn/lẻ âm nhỏ nhất trong mảng

Hàm tìm số chẵn âm

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

Hàm tìm số lẻ âm

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

Chương trình tìm số chẵn âm

#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 ChanAmNhoNhat(int a[], int n);
void main()
{
	int a[MAX],n;
	nhapmang(a,n);
	printf("\nNoi dung cua mang");
	xuatmang(a,n);
	if(ChanAmNhoNhat(a,n)==-1)
		printf("\nTrong mang khong co so chan am ");
	else
		printf("\nSo chan am nho nhat trong mang la: %d",ChanAmNhoNhat(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 ChanAmNhoNhat(int a[], int n)
{
	int vt,d,i;
	for( i=0 ; i<n ; i++ )
		if(a[i]<0 && a[i]%2==0)
		{
			d=i;
			break;
		}
	if(i==n)
		return -1;
	vt=d;
	for(i=vt+1;i<n;i++ )
		if(a[i]<0 && a[i]%2==0 && a[i]<a[vt])
			vt=i;
	return a[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 vị trí số nguyên tố lớn nhất/nhỏ nhất trong mảng

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