#31613:


benjaminkuo (benjikuo)

學校 : 桃園市私立復旦高級中學
編號 : 199289
來源 : [140.138.52.77]
最後登入時間 :
2024-09-16 16:17:02
c435. MAX ! MAX ! MAX ! | From: [114.34.155.245] | 發表日期 : 2022-08-10 16:34

記得 ans = max( a[ i ] - a[ j ]  |  i <  j ),也就是說,如果只是單純的把數列中的「最大數」與「最小數」存起來,會錯測資#1跟測資#3,因為找到的「最大數」不一定在「最小數」的前面 (  i 必須小於 j  )。要避免這種情形,可以在更新「最大數」的變數時,同時更新「最小數」,並且把之前「最大數減最小數」的紀錄存起來,跟之後產生的「最大數減最小數」做比較。要注意的是,如果紀錄比較大,就不用改他。

這是一個解題的思路,或許還有別的。

 

@可以由此程式碼進行更改

「錯誤」的程式碼 (單純的把數列中的「最大數」與「最小數」存起來):

#include <bits/stdc++.h>
using namespace std;
int main () {
    long long int n, min, max, k;
    cin >> n;
    cin >> k;
    min = k, max = k;
    n -= 1;
    while (n--) {
        cin >> k;
        if (min > k) {
            min = k;
        }
        if (max < k) {
            max = k;
        }
    }
    cout << max - min << '\n';
}

 

 
ZeroJudge Forum