问题出在第二个循环中,循环条件应该是 j < s[i].size()-2,而不是 j < n-3。因为字符串的长度可能不是 n-3,而是不同的值,因此需要使用 string 类型的 size() 函数获取字符串的长度。修改后的代码如下:

#include #include using namespace std; int n; string name[110], s[110]; // name表示求救者姓名,s 表示求救信号。 int a[110]; // 定义一个数组记录每个求救者的求救信号中 sos 的个数 int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> name[i] >> s[i]; } int ans = 0; // 定义一个变量,用于记录最多的 sos 出现次数的最终答案 for(int i = 1;i <= n;i++){// 大循环,i 从 1 到 n 开始,计算每个求救者的求救信号中 sos 的个数 for(int j = 0;j < s[i].size()-2;j++){// 小循环,处理字符串的每一位,j 从 0 开始,一直到这个字符串倒数第三个, // 判断第 j 个字母是 s,第 j+1 个字母是 o,第 j+2 个字母是 s if(s[i][j] == 's' && s[i][j+1] == 'o' && s[i][j+2] == 's') a[i]++; // 以上同时成立说明找到了一个 sos,那么这个求救者的 sos 个数就要 +1 }

    if(a[i] > ans){// 如果这个人的 sos 个数破了纪录,则更新最终答案
        ans = a[i];
    } 
}

// 寻找最紧急求救者,使用打擂台法
for (int i = 1;i <= n;i++) {
    // 如果第 i 个人的 sos 次数等于最大值,则输出第 i 个人的名字
    if(a[i] == ans) cout << name[i];
}
cout << endl;// 输出换行
cout << ans;// 输出最终答案
return 0;

}

以下代码运行时出现问题#include string#include iostreamusing namespace std;int n;string name110 s110; name表示求救者姓名s 表示求救信号。int a110; 定义一个数组记录每个求救者的求救信号中 sos 的个数int main cin n; for int i = 1; i = n; i++

原文地址: https://www.cveoy.top/t/topic/bMml 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录