为什么我的代码不对

给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列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<iostream>
using namespace std;
struct arry
{ int a[100];};
int main()
{int t,i,j,k,m,n,l,c;
arry num[100];
cin>>t;
c=0;
int*p=new int[t];
while(c<t)
{
for(k=0;k<t;k++)
{ cin>>j;
for(i=0;i<j;i++)
{ cin>>num[k].a[i];
}
m=0;
for(i=0;i<j;i++)
{
for(n=0;n<j;n++)
{
for(l=0;l<j;l++)
{
if(num[k].a[i]+num[k].a[n]==num[k].a[l]&&i!=n)
m++;
}
}
}
p[c]=m;c++;
}
}
for(i=0;i<j;i++)
cout<<p[i]<<endl;}
为什么不对啊求教大神!!

这个算法题不应该暴力解的
你的时间和空间复杂度难道没有要求。。。。
错误:你这样做,会找到两遍的。。。1+3=4;3+1=4;这样就做了两次,其实计数只有一次。
(a[i]=1,a[n]=3;a[i]=3,a[n]=1)
提示:这题要用规划做的。。。。。追问

我们刚学C++时间和空间没啥要求。。大神啥叫规划 ,你说的错误确实是,那除以2就可以了吧?

追答

恩,如果你没要求的话,除以2是最简单的改法。
其实提醒你一下,可以先排序的,然后用break,这样可以减少时间复杂度,也可以用二叉树做,推荐你,如果想学好的话可以预习下数据结构,呵呵。
还有那个struct是没有用的,如果没有要求你记载原数据,不要开那个array,浪费。。。

追问

虽然二叉树什么的听不懂。。不过还是很感谢啦 这个代码我在vs2012上运行没结果啊 就是

这样的 这是啥情况。。

追答

最后一个循环的次数不应该是j次而应该是t次。。。。
for(i=0;i<t;i++) cout<<p[i]<<endl;}
后面的其实是未初始化的。。。
你的第一个和第二个除以2就是正确答案:2和4.。。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网