主题:三重循环求和
晚秋2012
[专家分:0] 发布于 2011-05-07 00:21:00
请各位大虾帮忙看看应该怎样修改才能得到正确结果:1.7627
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
void main()
{
int n1=100,n2=100,n3=100,i,j,k;//n1,n2,n3初始化 可以任意设置
double sum=0.0; //sum初始化
double a,m,n; //m:分子 n:分母
do
{ /*三重求和循环*/
for(i=-n1;i<=n1;i++)
{
for(j=-n2;j<=n2;j++)
{
for(k=-n3;k<=n3;k++)
{
if(i==0&&j==0&&k==0)
continue;
else
{
m=pow(-1.0,n1+n2+n3);
n=sqrt(pow((-n1+n2+n3),2.0)+pow((n1-n2+n3),2.0)+pow((n1+n2-n3),2.0));
a=2*m/n;
sum=sum+a;
}
}
}
}
}while(a>=1e-6);
printf("A的值=%6.6f",sum); //结果
}
回复列表 (共18个回复)
11 楼
killergsm [专家分:90] 发布于 2011-05-10 16:26:00
a的精度应当用得到的答案减去理论值
还有上面说错了,是&&没问题
12 楼
晚秋2012 [专家分:0] 发布于 2011-05-10 21:24:00
[size=3]楼主说的没错,可是还是不知道a的精度用代码怎么表示???[/size][em10][em10]
13 楼
晚秋2012 [专家分:0] 发布于 2011-05-10 21:26:00
[size=3]请大家帮忙想一下[/size]
14 楼
killergsm [专家分:90] 发布于 2011-05-11 10:54:00
while(fabs(sum - 1.7627) <= 1e-6)
15 楼
晚秋2012 [专家分:0] 发布于 2011-05-11 12:27:00
[size=3]可是在没求解得到A值1.7627前,这样表示while(fabs(sum - 1.7627) <= 1e-6)不行。[/size]
16 楼
killergsm [专家分:90] 发布于 2011-05-13 09:42:00
我也想知道答案怎么会算不对呢?有人能解释吗?
17 楼
cgl_lgs [专家分:21040] 发布于 2011-05-14 18:06:00
因为大家都想着n1,n2,n3的值一样,而实际上可能不一样。
18 楼
windy0will [专家分:2300] 发布于 2011-05-14 18:56:00
不知道从这个方面思考看可不可以:
设 a = - n1 + n2 + n3; n1 = (b+c) / 2;
b = + n1 - n2 + n3; =》 n2 = (+a+c) / 2;
c = + n1 + n2 - n3; n3 = (+a+b) / 2;
因为n1, n2, n3为整数,那么 等价于 a b c的奇偶性是一样的。
这样分两种情况来求。最后结果 = 全偶数 - 全奇数和 。
考虑到 分母 = (a*a + b*b + c*c) ** (1/2),故a b c的正负符号对分母的值不会有影响。所以只要考虑所有的 正数 即可(0单独考虑). 然后在 乘以 8。
我来回复