C ++打印结果中最高的成员

时间:2018-02-18 04:23:41

标签: c++ arrays

这是我的计算机导师给我的问题,我试图用简单的词语来解释这个问题(我必须提醒你,我的导师只教我循环数组结构。我不能用这个问题来解决这个问题)< / p>

  1. 采取两个矩阵
  2. 在一个矩阵中打印n个学生的姓名
  3. 打印id,在另外2d中标记5个学生的主题 矩阵(n*6)
  4. 找到总共5个科目中最高的学生 打印学生姓名,每个科目的标记及其总数 标记。(我认为我们必须有一个结构)
  5. 例如:最高分由以下方式保障:

    Name;
    id no;
    marks in sub 1;
    marks in sub 2;
    marks in sub 3;
    marks in sub 4;
    marks in sub 5;
    total;
    
    1. 然后打印身份和最高学生的姓名 每个主题
    2. 例如:

      Subject 1  ID  name 
      Subject 2  ID  name ..... 
      

      我能够完全解决它,直到(3)。但无法打印每个科目中最高的人;因为我必须使用很多变量(我不使用结构),所以我在打印每个主题中最高的人时遇到问题

      到目前为止我尝试了什么:

      #include <iostream>
      using namespace std;
      
      int main()
      {
          //making 1st array to print the names of the students
          char x[500][1000];
          int num, i;
          cout << "Enter the number of student's data you want to input" << endl;
          cin >> num;
          cout << endl;
      
          cout << "NAME LIST" << endl;
          cout << endl;
          for(i = 0; i < num + 1; i++)
          {
              cin.getline(x[i], 1000);
          }
      
          //making a 2nd array to print the id, marks in 5 subjects of the students
          int y[num][6];
          int a, b;
          cout << endl;
          cout << endl;
          cout << "DETAILS OF THE STUDENT" << endl;
          cout << endl;
          for(int a = 0; a < num; a++)
          {
              cout << "ID no of student " << a + 1 << ":";
              cin >> y[a][0];
              cout << "Marks in subject 1:";
              cin >> y[a][1];
              cout << "Marks in subject 2:";
              cin >> y[a][2];
              cout << "Marks in subject 3:";
              cin >> y[a][3];
              cout << "Marks in subject 4:";
              cin >> y[a][4];
              cout << "Marks in subject 5:";
              cin >> y[a][5];
              cout << endl;
          }
      
          cout << endl;
          cout << "The data you inputed:";
          cout << endl;
      
          for(a = 0; a < num; a++)
          {
              for(b = 0; b < 6; b++)
              {
                  cout << y[a][b] << " ";
              }
              cout << endl;
          }
          cout << endl;
          cout << endl;
      
          //finding the member who got the highest marks
          int s = 0;
          int largestSum = 0;
          for(a = 0; a < num; i++)
          {
      
              for(b = 0; b<6; b++)
              {
                  s += y[a][b];
              }
              // check to see if we have computed a new larger sum and save it if we have.
              if(s > largestSum)
              {
                  largestSum = s;
              }
          }
          cout << "largest sum: " << largestSum << endl;
      
          return 0;
      }
      

2 个答案:

答案 0 :(得分:0)

int s = 0; <- s needs to be reset to zero in each loop
int largestSum = 0;
for(a = 0; a<num; i++) <- loop doesn't break
{
    for(b = 0; b<6; b++) <- b should start at 1
    {
        s += y[a][b];
    }
    if(s > largestSum)
    {
        largestSum = s;
    }
}

i递增,a保持不变,循环永远。

s未重置为零,因此您将所有值相加。

b = 0的第一个索引应该是学生ID,应该跳过它。请尝试改为:

int largestSum = 0;
for(a = 0; a < num; a++)
{
    int s = 0;
    for(b = 1; b < 6; b++)
        s += y[a][b];

    if(s > largestSum)
        largestSum = s;
}

答案 1 :(得分:0)

这是一些可以解决的问题。
请注意,我只创建了一个矩阵并将Student个对象放入其中。

#include <ctime>
#include <iostream>
#include <string>
#include <vector>

const std::vector<std::vector<std::string>> names = {
    {"Ralph", "Gerald", "Henry", "Jessica", "Bob"},
    {"Tara", "Tami", "Mike", "Loretta", "Jean"},
    {"Jesse", "John", "Carl", "Josh", "Abby"},
    {"Carson", "Don", "George", "Hillary", "David"},
    {"Micah", "Charlie", "Maximus", "Leonidas", "Xerxes"}
};

int main()
{
    time_t seconds;
    time(&seconds);
    srand((unsigned int)seconds);

    struct Subjects
    {
        unsigned int subject[5] = {};
    };

    struct Student
    {
        Subjects sub;
        std::string name;
        int id;

        Student() : name("nobody"), id(-1) {};
        Student(const std::string& name, const unsigned int& id) : name(name), id(id) {}
    };

    Student stud_matrix[5][5] = {};
    int count = 0;
    for (size_t i = 0; i != 5; ++i)
    {
        for (size_t j = 0; j != 5; ++j)
        {
            stud_matrix[i][j].name = names[i][j];
            stud_matrix[i][j].id = count;
            ++count;
        }
    }

    std::cout << "All student names:\n";
    for (size_t i = 0; i != 5; ++i)
    {
        for (size_t j = 0; j != 5; ++j)
        {
            std::cout << stud_matrix[i][j].name << ' ';
        }
        std::cout << std::endl;
    }

    std::cout << std::endl;

    std::cout << "All student IDs:\n";
    for (size_t i = 0; i != 5; ++i)
    {
        for (size_t j = 0; j != 5; ++j)
        {
            std::cout << stud_matrix[i][j].id << ' ';
        }
        std::cout << std::endl;
    }

    std::cout << std::endl;

    for (size_t i = 0; i != 5; ++i)
    {
        for (size_t j = 0; j != 5; ++j)
        {
            stud_matrix[i][j].sub.subject[0] = (rand() % 100 + 1);
            stud_matrix[i][j].sub.subject[1] = (rand() % 100 + 1);
            stud_matrix[i][j].sub.subject[2] = (rand() % 100 + 1);
            stud_matrix[i][j].sub.subject[3] = (rand() % 100 + 1);
            stud_matrix[i][j].sub.subject[4] = (rand() % 100 + 1);
        }
    }

    Student best_student;
    unsigned int highest_grade = {};
    for (size_t i = 0; i != 5; ++i)
    {
        for (size_t j = 0; j != 5; ++j)
        {
            if (stud_matrix[i][j].sub.subject[0] > highest_grade)
            {
                highest_grade = stud_matrix[i][j].sub.subject[0];
                best_student = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[1] > highest_grade)
            {
                highest_grade = stud_matrix[i][j].sub.subject[1];
                best_student = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[2] > highest_grade)
            {
                highest_grade = stud_matrix[i][j].sub.subject[2];
                best_student = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[3] > highest_grade)
            {
                highest_grade = stud_matrix[i][j].sub.subject[3];
                best_student = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[4] > highest_grade)
            {
                highest_grade = stud_matrix[i][j].sub.subject[4];
                best_student = stud_matrix[i][j];
            }
        }
    }

    std::cout << "The highest scoring student in any one subject is: " << best_student.name << std::endl;
    std::cout << "ID: " << best_student.id << std::endl;
    std::cout << "Marks in sub1: " << best_student.sub.subject[0] << std::endl;
    std::cout << "Marks in sub2: " << best_student.sub.subject[1] << std::endl;
    std::cout << "Marks in sub3: " << best_student.sub.subject[2] << std::endl;
    std::cout << "Marks in sub4: " << best_student.sub.subject[3] << std::endl;
    std::cout << "Marks in sub5: " << best_student.sub.subject[4] << std::endl;
    std::cout << "Total: " << best_student.sub.subject[0] + best_student.sub.subject[1] + best_student.sub.subject[2] +
        best_student.sub.subject[3] + best_student.sub.subject[4] << std::endl;

    std::cout << std::endl;

    Student stud_sub1;
    Student stud_sub2;
    Student stud_sub3;
    Student stud_sub4;
    Student stud_sub5;

    unsigned int high_sub1 = {};
    unsigned int high_sub2 = {};
    unsigned int high_sub3 = {};
    unsigned int high_sub4 = {};
    unsigned int high_sub5 = {};

    for (size_t i = 0; i != 5; ++i)
    {
        for (size_t j = 0; j != 5; ++j)
        {
            if (stud_matrix[i][j].sub.subject[0] > high_sub1)
            {
                high_sub1 = stud_matrix[i][j].sub.subject[0];
                stud_sub1 = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[1] > high_sub2)
            {
                high_sub2 = stud_matrix[i][j].sub.subject[1];
                stud_sub2 = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[2] > high_sub3)
            {
                high_sub3 = stud_matrix[i][j].sub.subject[2];
                stud_sub3 = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[3] > high_sub4)
            {
                high_sub4 = stud_matrix[i][j].sub.subject[3];
                stud_sub4 = stud_matrix[i][j];
            }
            if (stud_matrix[i][j].sub.subject[4] > high_sub5)
            {
                high_sub5 = stud_matrix[i][j].sub.subject[4];
                stud_sub5 = stud_matrix[i][j];
            }
        }
    }

    std::cout << "Best of subject:\n";
    std::cout << "Subject 1:\nID: " << stud_sub1.id << ' ' << stud_sub1.name << " Score: " << high_sub1 << std::endl;
    std::cout << "Subject 2:\nID: " << stud_sub2.id << ' ' << stud_sub2.name << " Score: " << high_sub2 << std::endl;
    std::cout << "Subject 3:\nID: " << stud_sub3.id << ' ' << stud_sub3.name << " Score: " << high_sub3 << std::endl;
    std::cout << "Subject 4:\nID: " << stud_sub4.id << ' ' << stud_sub4.name << " Score: " << high_sub4 << std::endl;
    std::cout << "Subject 5:\nID: " << stud_sub5.id << ' ' << stud_sub5.name << " Score: " << high_sub5 << std::endl;

    system("pause");

    return 0;
}

示例输出:

All student names:
Ralph Gerald Henry Jessica Bob
Tara Tami Mike Loretta Jean
Jesse John Carl Josh Abby
Carson Don George Hillary David
Micah Charlie Maximus Leonidas Xerxes

All student IDs:
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

The highest scoring student in any one subject is: Bob
ID: 4
Marks in sub1: 77
Marks in sub2: 67
Marks in sub3: 7
Marks in sub4: 99
Marks in sub5: 66
Total: 316

Best of subject:
Subject 1:
ID: 23 Leonidas Score: 95
Subject 2:
ID: 18 Hillary Score: 92
Subject 3:
ID: 19 David Score: 98
Subject 4:
ID: 4 Bob Score: 99
Subject 5:
ID: 22 Maximus Score: 98