c++ - 为什么我的代码说 90 重复了 6 次,而不是 5 次?
问题描述
我正在研究的问题是来自 HackerRank 的“生日蛋糕蜡烛”。
基本上,程序接受输入,然后输出最大输入的输入次数。
例如,如果输入可能是:
4
3 2 1 3
4 将是数组中的元素数。3 2 1 3 将是数组中的元素。
输出为 2,因为 3(最大)重复 2 次。
这是我的代码:
#include <iostream>
using namespace std;
int main() {
long long num;
cin >> num;
long long arr[num];
for (int i = 0; i < num; i++) {
cin >> arr[i];
}
long long qwer{};
//find the largest value
for (int i = 1; i<num; i++) {
if (arr[0] < arr[i]) {
arr[0] = arr[i];
if (arr[0] == arr[i]) {
arr[0] = arr[i];
}
}
qwer = arr[0];
}
long long howmany = 0;
//find how many times the largest value is repeated
for (int i = 0; i<num; i++) {
if (arr[i] == qwer) {
howmany += 1;
}
}
cout << howmany;
return 0;
}
我的代码为上述测试用例提供了正确的输出。但是,对于以下测试用例,输出不正确:
10
18 90 90 13 90 75 90 8 90 43
对于这个测试用例,我的程序输出了 6,而不是 5。
10
44 53 31 27 77 60 66 77 26 36
对于这个测试用例,我的程序输出 3,而不是 2。
我的代码有什么问题?
提前致谢。
解决方案
您的代码的问题是您的“查找最大值”循环将数组的第一个元素替换为找到的最大值。当您在“查找多少次”循环中循环返回数组时,您有一个额外的高值实例,因此返回 6 而不是 5。
输入时的数组:18 90 90 13 90 75 90 8 90 43
在“查找最大值”循环完成后您的数组: 90 90 90 13 90 75 90 8 90 43
这对您的第一个示例起作用的原因是因为最高值是第一个元素。因此,您不会用任何东西替换第一个元素并在数组中创建额外的实例。如果您首先尝试一个具有最高值的 10 的数组,您将得到正确的数字输出。
此外,您可以将循环更改为:
qwer = arr[0];
//find the largest value
for (int i = 1; i<num; i++) {
if (qwer < arr[i]) {
qwer = arr[i];
}
}
这将消除您所看到的示例之间不一致的问题。
推荐阅读
- reactjs - 如何显示星期几的名称
- server - HERE Maps 自定义服务器
- python - PyQt5 Windows 10 缩放问题
- rust - 在 seanmonstar/warp 中禁用 http2
- python - 错误使用按钮更改 Plotly Ridgeplot 中的数据
- java - 确定活动目录用户是否启动了应用程序
- bash - 通过shell脚本创建文件后,它是否也可以用于在Finder中选择这些文件?
- vb.net - 将2个子项解决到文本框中
- java - 某些方法完成后如何启动/停止@Scheduled 任务
- powershell - 如何使用 Powershell 抓取日志中的特定错误