思路:
1、排序
2、选定一个值,再看他后面两个值相加会不会等于它
第一次解题出错的地方:
1、使用memset函数时要在头文件中加上#include<string.h>
2、没有注意到题目所问的是
其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
所以有可能会出现某些数,如5,既可以等于1+4又可以等于2+3,如果按照思路进行下去的话它会被计入两次,这就重复了。
看了大佬的题解,我们可以再定义一个数组b,首先初始化它的值,让数组里面的值都等于1,某个数被判定一次后令b的值为0,再在判断条件的时候加上b[i]!=0
附上最后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a[100],b[100];
int n,i,j,k,count=0;
memset(b,1,sizeof(b));
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]<a[j+1])
{k=a[j];
a[j]=a[j+1];
a[j+1]=k;}
}
}
//冒泡排序
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;k++)
{
if(a[i]==a[j]+a[k]&&a[j]!=a[k]&&b[i]!=0)
{
count++;
b[i]=0;}
}
}
}
printf("%d",count);
return 0;
}
网友评论