无法在二维数组中找到每列的最大值

时间:2014-01-11 08:42:41

标签: c++ arrays

问题 - http://codeforces.com/problemset/problem/152/A

我试图找到每个科目的最高分数,然后找到所有已经获得每个科目最高分的学生。如果学生在至少1个科目中得分最高,则相应元素的最佳分配值为1 。 找到数组中值为1的元素数量最好,我们可以确定成功学生的数量。 我在确定每个科目的最高成绩方面遇到了麻烦。测试用例7的每个科目的最高分数(如下所示)出错了。我的代码出了什么问题?

判断测试用例的日志输出错误:

Time: 0 ms, memory: 0 KB
Verdict: WRONG_ANSWER
Input
3 4
2553
6856
5133
Output
3
Answer
2
Checker comment
wrong answer expected 2, found 3

我的代码:

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

using namespace std;

int main()
{
    int n,m,temp;
    string grade[101];
    int best[101],maxgrade[101];

    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>grade[i];
    }

    for(int j=0;j<m;j++) //Finding maximum grade per subject.
    {
        int maximum=grade[0][j];
        maximum-=48; //Marks are stored as characters.Subtracting 48 gives integral value of the ASCII value of number.

        for(int i=0;i<n;i++)
        {
            temp=grade[i][j];
            temp-=48;
            maxgrade[j]=max(maximum,temp);                      
        }
    }

    int successful=0;

    for(int i=0;i<n;i++) //Finding number of students having obtained maximum grade in atleast 1 subject.
    {
        for(int j=0;j<m;j++)
        {
            temp=grade[i][j];
            temp-=48;

            if(temp==maxgrade[j])
            {
                best[i]=1;
                successful++;
                break;
            }
        }
    }

    cout<<successful;
}

1 个答案:

答案 0 :(得分:1)

问题出现在第一个for循环中,您可以将其更正为跟随(请注意maxgrade [j] = max(...)表达式):

for(int j=0;j<m;j++) //Finding maximum grade per subject.
{
    maxgrade[j] = 0;

    for(int i=0;i<n;i++)
    {
        temp=grade[i][j] - 48;
        maxgrade[j]=max(maxgrade[j], temp);
    }
}