5

我的作业问题:

一个名为parkingTickets 的整数数组已被声明并初始化为自今年年初以来市警察每天开出的停车罚单数量。(因此,数组的第一个元素包含 1 月 1 日给出的票数;最后一个元素包含今天给出的票数。)

已声明并初始化名为 ndays 的变量以保存数组的大小。(因此,如果今天是 1 月 18 日,ndays 的值为 18;如果今天是 2 月 3 日,ndays 的值为 34。)

此外,还声明了一个名为 mostTickets 的变量以及一个变量 k。

在不使用任何其他变量的情况下,并且不更改 ndays 的值或 parkTickets 数组的元素,编写一些代码,使 mostTickets 包含在 parkTickets 中找到的最大值。

为此,我有以下代码:

for(k = 0; k < ndays; k++) {
    if (parkingTickets[k] > parkingTickets[ndays]) {
        mostTickets = parkingTickets[k];
    }
}

但是我的练习提交者说这是错误的。我的代码有什么问题?我也试过parkingTickets[ndays - 1]了,但这也不起作用。

4

4 回答 4

12

C++ 也提供std::max_element。我怀疑您的老师是否希望您使用它,但是了解标准库可能会很好。

mostTickets = *std::max_element(parking_tickets, parking_tickets + ndays)
于 2012-05-31T02:15:11.120 回答
9

你的比较是错误的。您每次都将当前元素与最后一个元素进行比较。您需要做的是将当前元素与 mostTickets 进行比较。IE

if(parkingTickets[k] > mostTickets)

此外,为了更好的衡量标准,我建议将 mostTickets 初始化为 parkingTickets[0]。

于 2012-05-31T02:10:35.907 回答
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) 才能完成,因为我们正在遍历数组并进行一些比较工作。

于 2012-07-27T16:39:52.003 回答
-2
mostTickets = parkingTickets[0]; k = 1;

while (k < ndays) {
   if (mostTickets < parkingTickets[k])
       mostTickets = parkingTickets[k];
   k++;
}
于 2022-01-31T15:31:35.527 回答