使用STL列表获得最高价值

时间:2016-05-04 07:59:38

标签: c++ list data-structures iterator

编写一个C ++程序,要求用户输入一个整数m,然后输入m个其他学生名字和代表其最终成绩的数字。每次,用户都必须输入一个名字和一个等级。名称和成绩将存储在单独的列表中。

获得所有姓名和成绩后,该计划将查找并显示最高年级和拥有该学生的学生姓名

我尝试了它并且能够获得最高分,但我的名字错了...

plzzzzzzzzzzzzzzzzzzzzzzzz help !!!!!

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


    <hr class="line-rooms-sphere-4 rooms-hidden"/>

    <hr class="line-rooms-sphere-4 rooms-hidden"/>

    <hr class="line-rooms-sphere-4 rooms-hidden"/>


    <script>
    $(document).ready(function(){
      
      $('hr[class^="line-rooms-sphere"]').css("border-width","8px");
      
     });

    </script>

2 个答案:

答案 0 :(得分:2)

您在循环之前将name设置为name = *tn;,以后再也不要更改它。你期待什么?

答案 1 :(得分:0)

此答案仅供您参考。

虽然我不建议您将此代码提交给您的导师(但无论如何都要在课后与他/她讨论),这就是我“在现实世界中”处理此任务的方式。

剧情简介:

  • 所有算法逻辑用std算法表示。

  • 由于效率原因,列表被替换为载体。

  • 内置测试工具允许使用--test选项运行程序以检查逻辑,并为此...

  • 逻辑与IO流分离。

  • 输入不完整或无效时的错误处理。

  • 使用模板功能获取输入,无需复制逻辑。

这段代码需要c ++ 11,这应该是你学习的最低限度。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>

template<class...Ts>
std::istream& acquire(std::istream& stream, const char* prompt, Ts&...ts)
{
    if (std::addressof(stream) == std::addressof(static_cast<std::iostream&>(std::cin))) {
        std::cout << prompt;
        std::cout.flush();
    }
    using expand = int[];
    void(expand { 0, ((stream >> ts),0)... });
    return stream;
}

bool args_have_test(const std::vector<std::string>& args)
{
    auto ifind = std::find(std::begin(args), std::end(args), "--test");
    return ifind != std::end(args);
}

[[noreturn]]
bool input_error(const char* context)
{
    std::cerr << "input error while " << context << std::endl;
    exit(2);
}


int main(int argc, const char* const *argv)
{
    std::istringstream stest {
        "5\n"
        "bob 5\n"
        "bill 2\n"
        "bernie 9\n"
        "bert 7\n"
        "bart 8\n"
    };
    auto args = std::vector<std::string> { argv + 1, argv + argc };
    auto& stream = args_have_test(args) ? static_cast<std::istream&>(stest)
    : static_cast<std::istream&>(std::cin);
    int count = 0;
    acquire(stream, "enter number of students: ", count)
    or input_error("entering number of students");

    std::vector<std::string> names;
    names.reserve(count);
    std::vector<int> grades;
    grades.reserve(count);
    std::string name;
    int grade;
    while (count--) {
        acquire(stream, "enter name and grade followed by enter: ", name, grade)
        or input_error("entering name and grade");

        names.push_back(name);
        grades.push_back(grade);
    }
    auto imax = std::max_element(std::begin(grades), std::end(grades));
    if (imax == std::end(grades)) {
        std::cerr << "empty list\n";
        exit(1);
    }
    auto iname = std::next(std::begin(names), std::distance(std::begin(grades),
                                                            imax));
    std::cout << "highest grade was " << *imax << " acheived by " << *iname << std::endl;
    return 0;
}