193.在A2Oj上总是显示我提交的错误答案?

时间:2015-06-12 11:25:48

标签: c++

有谁知道这个程序在哪里输错了?我尝试了所有我能想到的测试用例,但似乎有一些我没有涉及的测试用例。这是链接:http://a2oj.com/p.jsp?ID=193

这是我的代码:

#include <iostream>
#include <string>
using namespace std;

int count_Char(string s, char key){
    int count = 0;
    for (int i = 0; i < s.size(); i++){
        if (s[i] == key){
            count++;
        }
    }

    return count;
}

int max(int arr[],int size, int &maxi){
    int max = arr[0];
    for (int i = 0; i < size; i++){
        if (arr[i]>max){
            max = arr[i];
            maxi = i;
        }
    }
    return max;
}
int main(){
    char alpha[26] = { 'a', 'b' , 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x','y', 'z' };
    int N;
    cin >> N;
    const int MaxSize = 100;
    const int rows = N;
    string Candies[MaxSize];
    int **countArr = new int*[rows];
    for (int i = 0; i < rows; i++){
        countArr[i] = new int[MaxSize];
    }



    for (int i = 0; i < N; i++){
        cin >> Candies[i];
    }

    for (int i = 0; i < rows; i++){
        for (int j = 0; j < MaxSize; j++){
            countArr[i][j] = 0;
        }
    }

    int maxCountArr[MaxSize];
    int maxindex[26];
    int maxi = 0;
    for (int i = 0; i < N; i++){
        for (int j = 0; j < Candies[i].size();j++){
            if (Candies[i][j] >= 'a' && Candies[i][j] <= 'z'){
                countArr[i][Candies[i][j] - 'a']++;
            }
        }
        maxCountArr[i] = max(countArr[i], MaxSize, maxi);
        maxindex[i] = maxi;
    }

    for (int i = 0; i < N; i++){
                cout << maxCountArr[i] << ' ' << alpha[maxindex[i]] << endl;
    }

}

1 个答案:

答案 0 :(得分:1)

以下是您的程序输出错误的测试用例示例:

输入:

2
ffff
abc

输出:

4 f
1 f

原因是您没有将maxi重置为0,而是main函数中第4个for循环的每次迭代。只需将其更改为:

int maxi;
for (int i = 0; i < N; i++){
    maxi = 0;
    for (int j = 0; j < Candies[i].size();j++){
        if (Candies[i][j] >= 'a' && Candies[i][j] <= 'z'){
            countArr[i][Candies[i][j] - 'a']++;
        }
    }
    maxCountArr[i] = max(countArr[i], MaxSize, maxi);
    maxindex[i] = maxi;
}

更新

您的maxindex数组的大小也是错误的:它是一个包含26个元素的数组,您可以向其中写入N个元素,当N> 26时会导致undefined behavior。将其定义更改为int maxindex[rows];应该可以解决问题。