问题描述
找出卡片正反面差值重复的几个数,并从大到小排序输出。
题目分析
开辟一个数组,数组的index是每张卡牌正反面的差值,value是出现次数。我们在输入的过程中,只需要将卡牌的正反面相减得到的差作为索引,就value++即可。
由于最后是从大到小排列,所以我们逆序输出即可,当value>1时我们就将其输出。
代码
#include<iostream>
#include<math.h>
#define MAX_LEN 10000
using namespace std;
int main()
{
int N;
cin>>N;
int res[MAX_LEN]={0};
for(int i=0;i<N;i++)
{
int num;
cin>>num;
res[abs(num-i-1)]++;
}
for(int i=MAX_LEN-1;i>=0;i--)
{
if(res[i]>1)
{
cout<<i<<" "<<res[i]<<endl;
}
}
}
答题用时7min
Q83——finish√