给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
Input
第一行是一个整数T,表示一共有多少组数据。 1<= T <= 100
接下来的每组数据共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个整数组成的数列。
Output
对于每组数据,输出一个整数(占一行),就是数列中等于其他两个数之和的数的个数。
Sample Input
2
4
1 2 3 4
5
3 5 7 9 10
Sample Output
2
1
#include<stdio.h>
int select(int a[],int n)
{
int i=0,j=0,k=0;
int temp;
int flag=0;
int s=0;
for(i=0;i<n;++i)
for(j=0;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i]-a[j];
flag=0;
for(k=0;k<n;k++)
{
if(a[k]==temp&&k!=j)
{
s++;
flag=1;
}
if(flag==1)
break;
}
if(flag==1)
break;
}
}
return s;
}
int main()
{
int a[100];
int b[100];
int n;
int i=0;
int j=0;
int num;
scanf("%d",&num);
for(j=0;j<num;j++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
b[j]=select(a,n);
}
for(j=0;j<num;j++)
printf("%d\n",b[j]);
return 0;
}
这是我的代码,但是提交是wronganswer,在vc上编译运行没错啊,难道是是我格式错了,我用数据去检测也没错啊??why??
7 个解决方案
#1
给个原题链接吧
#2
把第二个 if(flag==1) break;去掉
这样可以找到所有可能的配对
这样可以找到所有可能的配对
#3
int select(int a[],int n)
{
int i=0,j=0,k=0;
int s=0;
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])
{
s++;
printf("%d+%d=%d\n", a[i], a[j], a[k]);
}
}
}
return s;
}
测试OK
你的程序用
1
10
1 2 3 4 5 6 7 8 9 10
测试会失败
#4
我的用你给的数据测试没有失败啊,返回的是8,不对么??
#5
应该是没有考虑到 有0存在的情况
#6
汗,还是wa啊,我还是老老实实的求和在比较好了……
#7
1 <= n <= 100
#1
给个原题链接吧
#2
把第二个 if(flag==1) break;去掉
这样可以找到所有可能的配对
这样可以找到所有可能的配对
#3
int select(int a[],int n)
{
int i=0,j=0,k=0;
int s=0;
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])
{
s++;
printf("%d+%d=%d\n", a[i], a[j], a[k]);
}
}
}
return s;
}
测试OK
你的程序用
1
10
1 2 3 4 5 6 7 8 9 10
测试会失败
#4
我的用你给的数据测试没有失败啊,返回的是8,不对么??
#5
应该是没有考虑到 有0存在的情况
#6
汗,还是wa啊,我还是老老实实的求和在比较好了……
#7
1 <= n <= 100