Tìm 3 doanh nghiệp có doanh thu lớn nhất

đề bài: đưa ra 3 doanh nghiêp có doanh thu lớp nhất.
mình đã cố gắng nghĩ và tìm kiếm các hàm nhưng vẫn chưa nghĩ ra đoạn code đưa ra 3 doanh nghiệp có doanh thu lớn nhất. bạn nào biết cách chỉ giùm mình với ạ. mình cảm ơn ạ

#include<conio.h>
#include<stdio.h>
#include<iostream>
using namespace std;
struct dn
{
    char mdn[10],ht[20];
    int nam;
    float dt;

};
void nhap(dn &d )
{
cin.ignore(1);
        cout<<"\nma doanh nghiep:";gets(d.mdn);
        cout<<"\n ten dn:";gets(d.ht);
        cout<<"\n nam thanh lap:"; cin>>d.nam;
        cout<<"\n doanh thu: "; cin>>d.dt;


}
void xuat(dn & d)
{
    cout<<"\nma doanh nghiep:" << d.mdn;
    cout<<"\nten doanh nghiep:" << d.ht;
    cout<<"\nnam doanh nghiep:" << d.nam;
    cout<<"\ndoanh thu doanh nghiep:" << d.dt;}


    dn nhonhat(dn d[],int n)
    {
        dn a=d[0];
        for(int i=1;i<n;i++)
        if (d[i].nam<a.nam) a=d[i];
        return a;
    }
    dn lonnhat(dn d[],int n)
    {
        dn b= d[0];
        for(int i=1;i<n;i++)
            if (d[i].dt>b.dt) b=d[i];
        return b;
        
    }
    
void nhap(dn d[], int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<"\nnhap sinh vien thu :"<<i+1;
        nhap(d[i]);
    }
}

int main()
{
     dn a[20];
    int k;

    cout <<"so doanh nghiep:", cin>> k;

   nhap(a,k);
   dn sl = nhonhat(a,k);
   xuat(sl);
   cout<<"\ndoanh thu lon nhat:";
   dn h=lonnhat(a,k);
   xuat(h);
   }

Nếu bạn muốn đơn giản thì cứ brute force. Tìm số lớn thứ 2 bằng cách xét cái mảng tìm số lớn nhất sao cho số đó bé hơn số lớn nhất tìm đc bằng hàm lớn nhất. Làm tương tự cho số lớn thứ 3. Cuối cùng tạo 1 hàm 3 số lớn nhất trong đó bạn lần lượt gọi hàm lớn nhất, lớn nhì, lớn 3 rồi trả về mảng chứa 3 giá trị đó.

2 Likes

Sắp xếp mảng bằng std::sort() trong <algorithm>, hoặc tự viết hàm sắp xếp. Sắp xếp xong xuôi thì chọn 3 giá trị lớn nhất là xong.

2 Likes

C++ có std::nth_element đó :V

std::nth_element(a, a + 2, a + k, [](dn& a, dn& b) { return a.dt > b.dt; });
// a[0], a[1], a[2] là 3 dn có dt lớn nhất
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?