Bạn chưa đăng nhập. Vui lòng đăng nhập để hỏi bài
Lala

Viết chương trình C++.Có n người xếp thành hàng để mua vé. Thời gian bán vé cho người thứ i là ti . Nhân viên bán vé mỗi lần chỉ bán vé cho một người, người này mua vé xong mới đến lượt người kế tiếp. Trong xấp vé mà nhân viên đang bán có một vé cặp (gồm 2 vé) và vé cặp này phải bán cho một người với thời gian bán vẫn không thay đổi, tức là nếu người thứ i mua một vé với thời gian ti thì khi mua vé cặp này vẫn tốn thời gian là ti. Vì mỗi người chỉ có nhu cầu mua một vé nên khi một người nào đó mua vé cặp này thì anh ta sẽ nhượng lại một vé cho người đứng phía sau mình, và người được nhượng vé này sẽ rời khỏi hàng cùng với người phía trước mà không phải chờ mua vé nữa. Yêu cầu: Hãy cho biết nhân viên bán vé phải bán chiếc vé cặp cho người nào để tổng thời gian bán vé là ít nhất. Dữ liệu vào: Cho từ tệp văn bản TICKET.INP gồm hai dòng: • Dòng thứ nhất ghi số nguyên dương n (2

Hồng Nhan
20 tháng 11 2023 lúc 13:04

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

struct Person {
    int index;  // Vị trí của người trong hàng
    int time;   // Thời gian mua vé của người
};

bool compareByTime(const Person& a, const Person& b) {
    return a.time < b.time;
}

int main() {
    // Đọc dữ liệu từ tệp TICKET.INP
    std::ifstream inputFile("TICKET.INP");
    if (!inputFile.is_open()) {
        std::cerr << "Khong the mo tep TICKET.INP" << std::endl;
        return 1;
    }

    int n;
    inputFile >> n;

    std::vector<Person> people;

    for (int i = 1; i <= n; ++i) {
        Person person;
        person.index = i;
        inputFile >> person.time;
        people.push_back(person);
    }

    // Đóng tệp TICKET.INP
    inputFile.close();

    // Sắp xếp danh sách người theo thời gian mua vé tăng dần
    std::sort(people.begin(), people.end(), compareByTime);

    // Tìm người mua vé cặp để tổng thời gian bán vé là ít nhất
    int totalTime = 0;
    int minTotalTime = INT_MAX;
    int bestPairIndex = -1;

    for (int i = 0; i < n - 1; ++i) {
        totalTime += people[i].time;

        if (totalTime + people[i + 1].time < minTotalTime) {
            minTotalTime = totalTime + people[i + 1].time;
            bestPairIndex = i;
        }
    }

    // Ghi kết quả ra màn hình
    std::cout << "Nguyen vien ban ve can ban ve cap cho nguoi thu: " << people[bestPairIndex + 1].index << std::endl;

    return 0;
}


Các câu hỏi tương tự
thanhthuy15072010@gmail....
Xem chi tiết
Phạm Ngọc Khánh Ngân
Xem chi tiết
Bảo Châu Đỗ Hoàng
Xem chi tiết
Hồ Hoàng Long
Xem chi tiết
Trần Văn Dũng
Xem chi tiết
Ein
Xem chi tiết
Minu Pham
Xem chi tiết
phạm gia hân
Xem chi tiết
TBNT
Xem chi tiết