PAT_B_1083_是否存在相等的差

題目描述:數組

給定 N 張卡片,正面分別寫上 一、二、……、N,而後所有翻面,洗牌,在背面分別寫上 一、二、……、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

要點反思:spa

注意:計算差val值時沒有犧牲數組第一位即Diff[0],
     則最後遍歷Diff[]數組時不要忽略第一位!!!

本人AC代碼:blog

// 1083 是否存在相等的差
# include <stdio.h>
# include <math.h>
# define Max 10001

int main(void)
{
	int i, N, temp;
	int Diff[Max] = {0}; // 記錄不一樣種類差的個數 
	int val = 0; // 求差 
	int max = 0; // 記錄val的最大值 
	scanf("%d",&N);
	
	for(i=1; i<=N; i++)
	{
		scanf("%d",&temp);
		val = abs(temp - i);
		Diff[val]++;
		if (max < val)
		{
			max = val; 
		}
	}
	// 倒序遍歷到 Diff[0] 
	for (i=max; i>=0; i--)
	{
		if (Diff[i] >= 2)
		{
			printf("%d %d\n",i,Diff[i]);
		}
	}
	
	return 0;
}

RRRio

相關文章
相關標籤/搜索