1. 程式人生 > >PAT 1083. 是否存在相等的差 (20)

PAT 1083. 是否存在相等的差 (20)

1、2、……、N。將每張牌的正反兩面數字相減(大減小),得到 N 個非負差值,其中是否存在相等的差?
輸入格式:
輸入第一行給出一個正整數 N(2 <= N <= 10000),隨後一行給出 1 到 N 的一個洗牌後的排列,第 i 個數表示正面寫了 i 的那張卡片背面的數字。
輸出格式:
按照“差值 重複次數”的格式從大到小輸出重複的差值及其重複的次數,每行輸出一個結果。
輸入樣例:
8
3 5 8 6 2 1 4 7
輸出樣例:
5 2
3 3
2 2

分析:所有差值出現的次數儲存在a陣列中,從後往前輸出所有出現的次數>=2的值~

#include <iostream>
using namespace std;
int main() {
    int n, t, a[10000] = {0};
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> t;
        a[abs(t-i)]++;
    }
    for (int i = 9999; i >= 0; i--)
        if (a[i] >= 2) cout << i << " " << a[i] << endl;
    return 0;
}