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

9
27070

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

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

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

Giữ lại vị trí 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

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

Duyệt mảng từ vị trí phần tử chẵn đầu tiên + 1 đến hết mảng

Nều là giá trị chẵn và giá trị chẵn lớn hơn/nhỏ hơn giá trị chẵn đầ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ớn nhất/nhỏ nhất

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

Hàm tìm giá trị chẵn lớn nhất

Ví dụ: n=6

a[0]=5;a[1]=8;a[2]=7;a[3]=23;a[4]=12;a[5]=10

int SoChanLonNhat(int a[], int n)
{
     int i,d,vt;
     for( i=0 ; i<n ; i++ )
           if( a[i]%2==0)       // 8 chia het cho 2
           {
                d=i;             // d=1
                break;           // thoat khoi lenh
           }
     if(i==n)
           return -1;           // trong mang khong co gia tri chan
     vt=d;
     for( i=d+1 ; i<n ; i++ ) // i=2;i<6;i++
           if(a[i]%2==0 && a[i]>a[vt]) // a[4]%2==0 && a[4]>a[1]; a[5]%2==0 && a[5]<a[4]
                vt=i;          // vt=4
     return a[vt];              // tra ve gia tri la: 12

}

Hàm tìm giá trị chẵn nhỏ nhất

int SoChanNhoNhat(int a[], int n)

{
     int i,d,vt;
     for( i=0 ; i<n ; i++ )
           if( a[i]%2==0)       // 8 chia het cho 2
           {
                d=i;             // d=1
                break;           // thoat khoi lenh
           }
     if(i==n)
           return -1;           // trong mang khong co gia tri chan
     vt=d;
     for( i=d+1 ; i<n ; i++ ) // i=2;i<6;i++
           if(a[i]%2==0 && a[i]<a[vt]) // a[4]%2==0 && a[4]>a[1]; a[5]%2==0 && a[5]>a[1]
                vt=i;          // vt=1
     return a[vt];              // tra ve gia tri la: 8

}

Chương trình tìm giá trị lớn nhất/nhỏ nhất trong mảng

#include<stdio.h>
#include<conio.h>
#define MAX 100
void nhapmang(int a[], int &n);
void xuatmang(int a[], int n);
int SoChanLonNhat(int a[], int n);
int SoChanNhoNhat(int a[], int n);
void main()
{
	int a[MAX],n;
	nhapmang(a,n);
	printf("\nNoi dung cua mang");
	xuatmang(a,n);
	if(SoChanLonNhat(a,n)==-1)
		printf("\nTrong mang khong co so chan ");
	else
		printf("\nSo chan lon nhat trong mang la: %d",SoChanLonNhat(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 SoChanLonNhat(int a[], int n)
{
     int i,d,vt;
     for( i=0 ; i<n ; i++ )
           if( a[i]%2==0)       // 8 chia het cho 2
           {
                d=i;             // d=1
                break;           // thoat khoi lenh
           }
     if(i==n)
           return -1;           // trong mang khong co gia tri chan
     vt=d;
     for( i=d+1 ; i<n ; i++ ) // i=2;i<6;i++
           if(a[i]%2==0 && a[i]>a[vt]) // a[4]%2==0 && a[4]>a[1]; a[5]%2==0 && a[5]<a[4]
                vt=i;          // vt=4
     return a[vt];              // tra ve gia tri la: 12
}
int SoChanNhoNhat(int a[], int n)
{
     int i,d,vt;
     for( i=0 ; i<n ; i++ )
           if( a[i]%2==0)       // 8 chia het cho 2
           {
                d=i;             // d=1
                break;           // thoat khoi lenh
           }
     if(i==n)
           return -1;           // trong mang khong co gia tri chan
     vt=d;
     for( i=d+1 ; i<n ; i++ ) // i=2;i<6;i++
           if(a[i]%2==0 && a[i]<a[vt]) // a[4]%2==0 && a[4]>a[1]; a[5]%2==0 && a[5]>a[1]
                vt=i;          // vt=1
     return a[vt];              // tra ve gia tri la: 8

}

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ẻ âm nhỏ nhất trong mảng

9 COMMENTS

  1. #include
    #include
    #define MAXSIZE 100
    void nhapmang(int a[], int &n)
    {
    do
    {
    printf(“Nhap so phan tu:”);
    scanf(“%d”,&n);
    }while (n<=0);
    for(int i=0;i<n;i++)
    {printf("Phan tu thu a[%d]:",i);
    scanf("%d",&a[i]);
    }

    }
    void xuatmang(int a[], int n)
    {for(int i=0;i<n;i++)
    printf("%4d",a[i]);
    }
    int scln(int a[],int n)
    {
    int max;
    for(int i=0; i<n;i++)
    {
    if(a[i]%2==0)
    {max=a[i];
    for(int j=0;jmax && a[j]%2==0)
    max=a[j];
    }}
    return max;
    }
    int main()
    {
    int a[100],n;
    nhapmang(a,n);
    xuatmang(a,n);
    printf(“\nSo chan lon nhat la: %d”,scln(a,n));
    getch();
    }

  2. Chỉ mình bài này với
    Viết chương trình nhập vào một ma trận là các số nguyên với kích thước MxN (M, N >= 3).
    Hãy:
    – Tìm phần tử có giá trị nhỏ nhất (min) và phần tử có giá trị lớn nhất (max) trong ma trận.
    – In ra các số chẵn nằm trong đoạn [min, max] không có trong ma trận.

    • Bạn phân tích đề, quan trọng là hiểu đề muốn làm gì, rồi viết ra giải thuật trên giấy theo cách hiểu. rồi hiện thực bằng code. sau đó tập sửa code, nếu vẫn ko đc thì có thể liên hệ page để hỗ trợ tiếp nhé!

  3. Giúp mình bài này với:
    Viết hàm nhập vào 1 mảng số nguyên 2 chiều gồm nxm phần tử.
    Viết hàm xuất mảng 2 chiều vừa nhập dưới dạng ma trận.
    Viết hàm tìm số lẻ nhỏ nhất.
    Viết hàm tính TBC các số chẵn.
    Viết hàm chính main() để gọi các hàm trên.
    (có sử dụng con trỏ)

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