Bài tập  /  Bài đang cần trả lời

Cần chọn những học sinh có điểm cao nhất trong danh sách để trao học bổng, hãy cho biết tên những học sinh đó?

Cho một danh sách n học sinh (1 ≤ n ≤200), mỗi học sinh có:

  • Tên: Là một xâu ký tự độ dài không quá 25 (hai học sinh khác nhau có tên khác nhau)
  • Điểm: Là số thực.

Yêu cầu: Cần chọn những học sinh có điểm cao nhất trong danh sách để trao học bổng, hãy cho biết tên những học sinh đó.

Dữ liệu: Vào từ file văn bản INPUT.TXT

  • Dòng đầu tiên: Chứa số n
  • Trong n cặp dòng tiếp theo, mỗi cặp gồm 2 dòng liên tiếp chứa thông tin về một học sinh
    • Dòng 1: Ghi tên
    • Dòng 2: Ghi điểm

Kết quả: Ghi ra file văn bản OUTPUT.TXT

Gồm một số dòng, mỗi dòng ghi tên một học sinh được học bồng.

C++ nha

1 trả lời
Hỏi chi tiết
75
Tham khảo câu trả lời từ Trợ lý ảo Lazi
#include
#include
#include
#include

struct Student {
std::string name;
double score;
};

bool compareStudents(const Student& s1, const Student& s2) {
return s1.score > s2.score;
}

int main() {
std::ifstream input("INPUT.TXT");
std::ofstream output("OUTPUT.TXT");

int n;
input >> n;

std::vector students(n);
for (int i = 0; i < n; i++) {
input >> students[i].name;
input >> students[i].score;
}

std::sort(students.begin(), students.end(), compareStudents);

double highestScore = students[0].score;
for (const Student& student : students) {
if (student.score == highestScore) {
output << student.name << std::endl;
} else {
break;
}
}

input.close();
output.close();

return 0;
}
1
0
Hưngg
16/04 08:20:21
+5đ tặng
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

struct Student {
    string name;
    float score;
};

bool compareStudents(const Student &a, const Student &b) {
    return a.score > b.score; // Sắp xếp theo điểm giảm dần
}

int main() {
    ifstream inputFile("INPUT.TXT");
    ofstream outputFile("OUTPUT.TXT");

    if (!inputFile.is_open()) {
        cout << "Could not open input file!" << endl;
        return 1;
    }

    int n;
    inputFile >> n;
    vector<Student> students(n);

    // Đọc thông tin về học sinh từ file INPUT.TXT
    for (int i = 0; i < n; ++i) {
        inputFile >> students[i].name;
        inputFile >> students[i].score;
    }

    // Sắp xếp học sinh theo điểm giảm dần
    sort(students.begin(), students.end(), compareStudents);

    // Lưu tên của học sinh có điểm cao nhất
    float highestScore = students[0].score;
    vector<string> scholarshipRecipients;
    for (const auto &student : students) {
        if (student.score == highestScore) {
            scholarshipRecipients.push_back(student.name);
        } else {
            break; // Đã tìm ra tất cả học sinh có điểm cao nhất
        }
    }

    // Ghi tên học sinh đạt học bổng vào file OUTPUT.TXT
    for (const auto &name : scholarshipRecipients) {
        outputFile << name << endl;
    }

    inputFile.close();
    outputFile.close();

    return 0;
}
 

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm
Bài tập liên quan
Bài tập Lập trình Lớp 7 mới nhất
Trắc nghiệm Lập trình Lớp 7 mới nhất

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường

Học ngoại ngữ với Flashcard

×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500K