和数问题,求解答~~

时间:2022-02-25 05:48:57
Description
给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列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


引用 3 楼 nfer_cn 的回复:
C/C++ code

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++)
      ……
我的用你给的数据测试没有失败啊,返回的是8,不对么??

#5


应该是没有考虑到 有0存在的情况

#6


汗,还是wa啊,我还是老老实实的求和在比较好了……

#7


引用 5 楼 dongxu1234 的回复:
应该是没有考虑到 有0存在的情况

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


引用 3 楼 nfer_cn 的回复:
C/C++ code

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++)
      ……
我的用你给的数据测试没有失败啊,返回的是8,不对么??

#5


应该是没有考虑到 有0存在的情况

#6


汗,还是wa啊,我还是老老实实的求和在比较好了……

#7


引用 5 楼 dongxu1234 的回复:
应该是没有考虑到 有0存在的情况

1 <= n <= 100