Tìm vị trí có giá trị lớn nhất và nhỏ nhất trong mảng

Source code dưới dùng để tìm vị trí chứa giá trị max và min trong mảng. Em đã tìm được giá trị max và min nhưng còn vị trí thì vẫn chưa, giúp em với ạ

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    int n = 5, a[] = {10,1,6,3,9}, u = 1, v = 9;
    vector<int> t(a,a+n);
    vector<int>::iterator low1, low2, low, up;

    sort(t.begin(), t.end());

    /*cout << "nhap u: ";
    cin >> u;
    cout << "nhap v: ";
    cin >> v;*/

    up = upper_bound(t.begin(), t.end(), u);
    low = lower_bound(t.begin(), t.end(), v);

    cout << "gom co " << low - up << " phan tu." << endl;
    //xuat ra so dem phan tu co trong khoang tu gia tri phan tu u -> phan tu v.

    int ln = *max_element(t.begin(), t.end());
    int nn = *min_element(t.begin(), t.end());

    low1 = lower_bound(t.begin(), t.end(), ln);
    cout << "Phan tu nho nhat: " << *low1 << endl;
    low2 = lower_bound(t.begin(), t.end(), nn);
    cout << "Phan tu lon nhat: " << *low2 << endl;

    cout << "vi tri pt lon nhat: " << (low1 - t.begin()) << endl;
    cout << "vi tri pt nho nhat: " << (low2 - t.begin()) << endl;

    return 0;
}
1 Like

code này do bạn viết?
cho xin ý tưởrng tìm max/min này được không?

1 Like

Muốn tìm max min trong 1 mảng có n phần tử thì mình dùng hàm max_element và min_element có sẵn trong thư viện algorithm cho tiện, còn không thì dùng vòng lặp for, khai báo max, min = a[0], rồi cho chạy từ i = 0 đến n - 1, nếu max < a[i] thì max = a[i] còn min thì ngược lại.

Nếu chỉ đơn giản là tìm max, min + index max, index min thì bạn chỉ cần xét index từ đầu cho đến cuối mảng là được, đâu cần lôi cả thư viện algorithm ra để làm gì. :smile:

Code đơn giản nhất (cách mình thường dùng):

#include <iostream>

int main() {
	int arr[] = {1, 0, 2, 4, 5, 3};
	int len = sizeof(arr) / sizeof(arr[0]);
	int iMax = 0, iMin = 0;
	for (int i = 1; i < len; i++) {
		if (arr[iMax] < arr[i]) iMax = i;
		if (arr[iMin] > arr[i]) iMin = i;
	}
	std::cout << "Array have " << len << " elements\n";
	std::cout << "Max of array is element " << iMax + 1 << ": " << arr[iMax] << '\n';
	std::cout << "Min of array is element " << iMin + 1 << ": " << arr[iMin] << '\n';
	return 0;
}
4 Likes

cảm ơn bạn nhiều nha, mình làm được r ^^

1 Like

C++ có sẵn hàm minmax_element mà :V :V

lower_bound upper_bound đòi hỏi mảng truyền vào phải được sắp xếp, nếu ko kết quả trả về cũng ko đúng đâu :V

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?