PAT-B 1083 是否存在相等的差【陣列】

Enjoy_process發表於2019-02-27

                                               PAT-B 1083 是否存在相等的差

                           https://pintia.cn/problem-sets/994805260223102976/problems/994805260780945408

 

 

題目

給定 N 張卡片,正面分別寫上 1、2、……、N,然後全部翻面,洗牌,在背面分別寫上 1、2、……、N。將每張牌的正反兩面數字相減(大減小),得到 N 個非負差值,其中是否存在相等的差?

輸入

輸入第一行給出一個正整數 N(2 ≤ N ≤ 10 000),隨後一行給出 1 到 N 的一個洗牌後的排列,第 i 個數表示正面寫了 i 的那張卡片背面的數字。

輸出

按照“差值 重複次數”的格式從大到小輸出重複的差值及其重複的次數,每行輸出一個結果。

樣例輸入

8
3 5 8 6 2 1 4 7

樣例輸出

5 2
3 3
2 2

分析

a[i]記錄差值為i的重複次數,重複次數需要大於1。

C++程式

#include<iostream>
#include<cmath>

using namespace std;

const int N=10005;

int a[N];//a[i]記錄差值為i的重複次數

int main()
{
	int n,x;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		a[abs(x-i)]++;//差值abs(x-i)重複的次數加一 
	}
	for(int i=n;i>=0;i--)
	  if(a[i]>1)//重複次數需要大於1才行 
	  	printf("%d %d\n",i,a[i]);
	return 0;
} 

 

相關文章