有谁知道这个程序在哪里输错了?我尝试了所有我能想到的测试用例,但似乎有一些我没有涉及的测试用例。这是链接: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;
}
}
答案 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];
应该可以解决问题。