c语言算法设计
如何设计一个算法,计算a*X1*X1+b*x2*x2+c*x3*x3+d*x4*x4=0,输入一组a,b,c,d,求有多少组x1x2x3x4满足解?(a,b,c,d,x1...
如何设计一个算法,计算a*X1*X1+b*x2*x2+c*x3*x3+d*x4*x4=0,输入一组a,b,c,d,求有多少组x1x2x3x4满足解?(a,b,c,d,x1,x2,x3,x4均不等于0,abcd范围为-50到50,x1x2x3x4范围-100到100)
不能用四个循环,会超时 展开
不能用四个循环,会超时 展开
5个回答
展开全部
我有个想法,不知道能不能帮到你
既然a*X1*X1+b*x2*x2+c*x3*x3+d*x4*x4=0,可以说明一个事实,a,b,c,d中必然只有两种情况,其一则是a,b,c,d中只有一个负数,其二则是a,b,c,d中只有一个正数,这样范围就缩小了;
总结下来的情况只有四种:
-a,b,c,d;
a,-b,c,d;
a,b,-c,d;
a,b,c,-d;
你可以往这方面考虑,这个方法理论上应该是可行的。。
既然a*X1*X1+b*x2*x2+c*x3*x3+d*x4*x4=0,可以说明一个事实,a,b,c,d中必然只有两种情况,其一则是a,b,c,d中只有一个负数,其二则是a,b,c,d中只有一个正数,这样范围就缩小了;
总结下来的情况只有四种:
-a,b,c,d;
a,-b,c,d;
a,b,-c,d;
a,b,c,-d;
你可以往这方面考虑,这个方法理论上应该是可行的。。
更多追问追答
追问
为啥不能是两个正数,两个负数
追答
a*X1*X1+b*x2*x2+c*x3*x3+d*x4*x4=0
等价于
a+4*(b+4*d)+9*c=0
即
a+4b+9c+16d=0
结果就可想而知了。。根据公约数和公倍数的性质,a和c的符号应该是一整一反,b和d的符号为一正一反;
进而题目就可以转换为找他们系数的最小公倍数;
a,b,c,d就可以用公倍数除以他们的系数,得出结果了,列举的结果在(-50,50)之间的输出就可以了。。。一般如果a如果不在这个范围内,那么这组数据就淘汰了。。
其中一组解就是:
a= -9,b=4,c=1,d=-1,
解集应该是:
4 <= | b | <= 12 1<= | a | <= 45 1<= | c | <=5 1<= | d | <=3
你可以往这方面思考下,我也是想到哪里说道哪?初步计算了一下。。不知道方法可行不。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里都没说abcd为整数,解都是无穷多的,还多少组,组得完么,
题目得再限定各个量都为整数,才有可能去举一举,
跟算法没关体系,只是数学题,没意思
题目得再限定各个量都为整数,才有可能去举一举,
跟算法没关体系,只是数学题,没意思
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对abcd和x1,x2,x3,x4类型会有个说明,不然解是无数的,同意楼上说法。
更多追问追答
追问
好吧,失误,整数
追答
超时不是因为计算不出吧,是因为你要将结果输出,显示的慢而已,你直接将个数总数输出显示的话,一下就出来了。
这不是算法,是纯计算题,不存在那人说的输入数的问题,输入啥数是用户的决定,如果全正,我输出“不存在一组x1,x2,x3,x4使得等式成立”即可,你要你要将这么多组全显示,那只能说显示得太慢了,随便一个就是几十甚至几百万个,这不是cpu计算的问题,是显示器的问题
例如:
-3 5 8 9
就有122473组解
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-17
展开全部
你可以优化循环嘛,有时候得到x1就做到不会有其他的x2,x3,x4满足条件,然后就把这一枝剪掉,这样时间上会好一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最笨的办法,用四个循环,判断满足就将解输出 ,继续循环
追问
这个会超时,我需要一种简单的算法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询