Tìm phần tử lớn nhất, nhỏ nhất trong mảng C/C++

0
18088
tim gia tri lon nhat nho nhat trong day so

Cách tìm vị trí phần tử lớn nhất, thứ hai, phần tử nhỏ nhất hoặc phần tử bất kì trong mảng một chiều C/C++. Tìm giá trị Max, Min trong dãy số nguyên cho trước.

1. Giới thiệu bài toán

Đây là một dạng bài tập đơn giản nhất dành cho người mới học lập trình. Nó giúp bạn hiểu được cấu trúc, cú pháp và cách sử dụng của ngôn ngữ lập trình đặc biệt là thao tác với mảng một chiều dùng vòng lặp for. Cùng tìm hiểu trong bài viết này nhé!

Đề bài: Tìm vị trí và in ra phần tử lớn nhất, lớn thứ 2 và phần tử nhỏ nhất trong mảng một chiều (dãy số) a có n phần tử, n nhập vào từ bàn phím (2<n<100).

Các bài viết liên quan đến lập trình khác:

2. Ý tưởng giải quyết bài toán

Để tìm vị trí phần tử lớn nhất hoặc nhỏ nhất trong một dãy số thực sự rất đơn giản. Ta sẽ cần khai báo thêm 2 biến, một biến để lưu vị trí phần tử cần tìm, biến còn lại để lưu giá trị max (min) đó. Trong mảng có thể có các phần tử bằng nhau, ta sẽ coi phần tử xuất hiện trước là phần tử cần tìm nhé!

Khi bắt đầu tiến hành gán phần tử đầu tiên thành phần tử max, min cần tìm sau đó sử dụng vòng lặp for duyệt từ đầu mảng tới cuối mảng. Khi duyệt mảng so sánh từng phần tử với max (min). Nếu phần tử đang duyệt có giá trị thỏa mãn thì ta lưu vị trí phần tử đó vào biến vị trí đồng thời gán nó thành max(min).

Đối với tìm phần tử lớn thứ 2. Thì ta cần khai báo thêm một biến max2, thực hiện như việc tìm phần tử lớn nhất. Tuy nhiên khi tìm được phần tử lớn hơn max, ta gán max2 thành max rồi mới gán max thành phần tử đang duyệt.
Bài toán này loại qua trường hợp mảng gồm các phần tử bằng nhau và mảng có 1 phần tử nhé!

3. Code tìm vị trí phần tử lớn nhất, nhỏ nhất C/C++

Cách giải quyết thì mình đã nói ở phần trên, trong phần này mình sẽ share code cho các bạn luôn nhé!

Code mình viết bằng C++ . Nếu các bạn muốn code C thì chỉ cần thay đổi chút câu lệnh nhập xuất là được.

Trong chương trình dưới đây, mình tổng hợp lại tất cả các yêu cầu của bài toán rồi nhé!

// By https://duongdinh24.com
// Github: https://github.com/duongdinh24/

#include<bits/stdc++.h>
using namespace std;

// Hàm nhập mảng
void nhapMang(int a[], int n){
    cout<<"Nhap mang: "<<endl;
    for(int i=0;i<n;i++)
        cin>>a[i];
}


// Ham tim phan tu max, in ra man hinh
void timMax(int a[], int n){
	int max =a[0];
	int vitrimax=0;
	
	for(int i=1;i<n;i++)
		if(a[i]>max){
			max = a[i];
			vitrimax=i;
		}
	cout<<"Max = "<<max<<endl;
	cout<<"Vi tri max: "<<vitrimax;
}

// Hàm tìm phần tử lớn thứ hai
void timMax2(int a[], int n){
	int max;
	int max2;
	
	// gan cai nao la gia tri ban dau;
	if(a[0]>a[1]){
		max =a[0];
		max2=a[1];
	}
	else{
		max=a[1];
		max2=a[0];
	}
	
	for(int i=0;i<n;i++){
		if(a[i]>max){
			max2=max;
			max=a[i];
		}
		if(a[i]<max && a[i]>max2)
			max2=a[i];
	}
	cout<<"\nPhan tu lon thu hai la: "<<max2<<endl;
}

// tim min kha giong voi tim max
void timMin(int a[], int n){
	int min =a[0];
	int vitrimin=0;
	
	for(int i=1;i<n;i++)
		if(a[i]<min){   // Khac
			min = a[i];
			vitrimin=i;
		}
	cout<<"Min = "<<min<<endl;
	cout<<"Vi tri min: "<<vitrimin;
}

int main(){
	int a[100]; // Khai bao mang a co n phan tu
	int n;
	do{
		cout<<"Nhap n: "; cin>>n;
	}
	while(n<2 || n>99); // Nhập 2<n<100
        // gọi các hàm đã viết ở trên
	nhapMang(a,n);
	timMax(a,n);
	timMax2(a,n);
	timMin(a,n);

}

Kết quả chạy chương trình trên:

tim phan tu lon thu hai trong mang

Lời kết

Bài viết trên là một chút kinh nghiệm nho nhỏ mong giúp đỡ bạn bắt đầu việc học tập. Cảm ơn bạn đã quan tâm bài viết của mình. Có thể bạn sẽ cần những bài viết về lập trình C/C++ của mình.

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here