C ++查找数组中的最大数字

时间:2012-05-31 02:07:18

标签: c++ arrays

我的作业问题:

已经宣布了一个名为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],但这也不起作用。

3 个答案:

答案 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),因为我们循环遍历数组并且有些工作需要进行比较。