题意:N张正面数值1—N的卡片,洗牌后,背面也写上1—N,计算正面背面的差值,输出相同差值的张数。
思路:将差值直接作为数组的下标,直接读入数据计算差值作为下标,该元素值加一,最后从最大下标9999到0输出值大于一的元素。
#include<stdio.h>
int main()
{
int N,i;
int a[10000],b[10000]={0};
scanf("%d",&N);
for(i=0;i<N;i++)a[i]=i+1;
for(i=0;i<N;i++){
int x;
scanf("%d",&x);
b[abs(a[i]-x)]++;
}
for(i=9999;i>=0;i--){
if(b[i]>1)printf("%d %d\n",i,b[i]);
}
return 0;
}