【題目描述】
小 A 有一個由 n 個非負整數構成的數組 a=[a1, a2, …, an]。他會對陣組 a 重複進行以下操作,直到數組 a 只包含 0。在一次操作中,小 A 會依次完成以下三個步驟:
(1)在數組 a 中找到最大的整數,記其下標為 k。如果有多個最大值,那麼選擇其中下標最大的。
(2)從數組 a 所有不為零的整數中找到最小的整數 aj。
(3)將第一步找出的 ak 減去 aj。
例如,數組 a=[2,3,4] 需要 7 次操作變成 [0,0,0]:
[2,3,4]→[2,3,2]→[2,1,2]→[2,1,1]→[1,1,1]→[1,1,0]→[1,0,0]→[0,0,0]
小 A 想知道,對於給定的數組 a,需要多少次操作才能使得 a 中的整數全部變成 0。可以證明,a 中整數必然可以在有限次操作後全部變成 0。你能幫他計算出答案嗎?

【輸入格式】
第一行,一個正整數 n,表示數組 a 的長度。
第二行,n 個非負整數 a1, a2, …, an,表示數組 a 中的整數。

【輸出格式】
一行,一個正整數,表示 a 中整數全部變成 0 所需要的操作次數。

【輸入樣例一】
3
2 3 4

【輸出樣例一】
7

【輸入樣例二】
5
1 3 2 2 5

【輸出樣例二】
13

【數據範圍】
對於所有測試點,保證 1≤n≤100,0≤ai≤100。

【算法分析】
終止條件:當數組中的最大值變為 0 時,説明所有元素都已為 0。

【算法代碼】

#include <bits/stdc++.h>
using namespace std;

const int maxn=105;
int a[maxn];
int cnt;

int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>a[i];
    }

    while(1) {
        int p=n; //max-value's position
        for(int i=1; i<=n; i++) {
            if(a[i]>=a[p]) p=i;
        }
        if(a[p]==0) break;

        int t=a[p]; //min-value
        for(int i=1; i<=n; i++) {
            if(a[i]!=0) t=min(t,a[i]);
        }
        a[p]-=t;
        cnt++;
    }

    cout<<cnt<<endl;

    return 0;
}

/*
in:
5
1 3 2 2 5

out:
13
*/