5

私の宿題の問題:

ParkingTicketsという名前の整数の配列が宣言され、今年の初めから毎日市警察から発行された駐車違反切符の数に初期化されています。(したがって、配列の最初の要素には1月1日に指定されたチケットの数が含まれ、最後の要素には今日指定されたチケットの数が含まれます。)

ndaysという名前の変数が宣言され、配列のサイズを保持するように初期化されました。(したがって、今日が1月18日の場合、ndaysの値は18になります。今日が2月3日の場合、ndaysの値は34になります。)

さらに、mostTicketsという名前の変数が変数kとともに宣言されています。

追加の変数を使用せず、ndaysの値またはparkingTickets配列の要素を変更せずに、parkingTicketsで見つかった最大値を含むmostTicketsになるコードを記述します。

このために、私は次のコードを持っています:

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と比較することです。すなわち

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 に答える