我的作业问题:
已经宣布了一个名为parkingTickets的整数数组,并将其初始化为自当年年初以来城市警察每天发出的停车票数量。 (因此,数组的第一个元素包含1月1日给出的票数;最后一个元素包含今天给出的票数。)
已声明并初始化名为ndays的变量以保存数组的大小。 (因此,如果今天是1月18日,则ndays的值为18;如果今天是2月3日,则ndays将具有值34.)
此外,还声明了名为mostTickets的变量以及变量k。
如果不使用任何其他变量,并且不更改ndays的值或parkingTickets数组的元素,请编写一些代码,这些代码会导致mostTickets包含parkingTickets中找到的最大值。
为此,我有以下代码:
for(k = 0; k < ndays; k++) {
if (parkingTickets[k] > parkingTickets[ndays]) {
mostTickets = parkingTickets[k];
}
}
但我的运动提交者说这是错的。我的代码出了什么问题?我也尝试了parkingTickets[ndays - 1]
,但这也不起作用。
答案 0 :(得分:11)
C ++也提供std::max_element。我怀疑你的老师是否希望你使用它,但了解标准库可能会很好。
mostTickets = *std::max_element(parking_tickets, parking_tickets + ndays)
答案 1 :(得分:9)
你的比较是错误的。您每次都将当前元素与最后一个元素进行比较。您需要做的是将当前元素与mostTickets进行比较。即。
if(parkingTickets[k] > mostTickets)
另外,为了更好的衡量,我建议将mostTickets初始化为parkingTickets [0]。
答案 2 :(得分:1)
让我们先分析一下你的解决方案
int parkingTickets[] = {3,6,7,4,8,10,0};
int ndays = 7;
for(k = 0; k < ndays; k++) {
if (parkingTickets[k] > parkingTickets[ndays]) {
mostTickets = parkingTickets[k];
}
}
此解决方案的问题是您尚未初始化mostTickets变量,并且您没有else子句。 这段代码适合你。
int parkingTickets[] = {3,6,7,4,8,10,0};
int ndays = 7;
int mostTickets = -1;
for(int k = 0; k < ndays; k++) {
if (parkingTickets[k] > mostTickets) {
mostTickets = parkingTickets[k];
}
}
在此之后,mostTickets将保存数组中最大数字的值。这个解决方案将完成O(n),因为我们循环遍历数组并且有些工作需要进行比较。