问题描述
王多鱼,我是你二爷,你现在是我唯一的继承人,没想到你竟然能混过我的第一个考验.................,听好了,我给你出了一个难题,如果你能在30天内解决遗嘱上的题目,你就能继承我的三百亿遗产。怎么样,孙子?敢接受挑战吗?我很怀疑你的胆量,所以我在遗嘱上加了一条懦夫条款,你可以当做这一切都没发生,拿1000万走人,或者,你可以赌把大的。三百亿!但是如果挑战失败,你一块钱都得不到。王多鱼打开遗嘱,遗嘱上写道: 给定n个整数,问这些数中有多少对整数,它们的值正好相差1。 王多鱼当然是选择三百亿的考验,眼看已经是第29天了,王多鱼没有任何思路,所以他求助于你,聪明的你能帮王多鱼解决难题,让他得到三百亿的遗产吗?
输入描述
输入的第一行包含一个正整数n(n不超过10000),表示给定整数的个数。第二行包含所给定的n个整数(给定的整数均为不超过30000的正整数)。
输出描述
输出一个整数,表示值正好相差1的数对的个数。
样例输入
20 15 4 20 16 2 3 18 14 8 9 9 5 1 17 5 2 12 20 3 9
样例输出
9
代码如下(新手学习,部分代码可能过于繁杂,欢迎大佬指正):
#include<stdio.h>
int main()
{
int a[20000];
int k[20000];
int b,c,d,e,f,g=0,h,j=0,l=0;
scanf("%d",&b);
for(c=0;c<b;c++)
{
scanf("%d",&a[c]);
}
for(c=0;c<b-1;c++)
{
for(e=c+1;e<b;e++)
{
f=a[c]-a[e];
if(f==1||f==-1)
{
h=a[e]+a[c];
k[g]=h;
g++;
}
}
}
for(c=0;c<g-1;c++)
{
for(e=c+1;e<g;e++)
{
if(k[c]-k[e]==0)k[e]=0;
}
}
for(c=0;c<g;c++)
{
if(k[c]!=0)j++;
}
printf("%d",j);
return 0;
}