回 帖 发 新 帖 刷新版面

主题:三重循环求和


请各位大虾帮忙看看应该怎样修改才能得到正确结果: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 楼

a的精度应当用得到的答案减去理论值
还有上面说错了,是&&没问题

12 楼


[size=3]楼主说的没错,可是还是不知道a的精度用代码怎么表示???[/size][em10][em10]

13 楼


[size=3]请大家帮忙想一下[/size]

14 楼

while(fabs(sum - 1.7627) <= 1e-6)

15 楼


[size=3]可是在没求解得到A值1.7627前,这样表示while(fabs(sum - 1.7627) <= 1e-6)不行。[/size]

16 楼

我也想知道答案怎么会算不对呢?有人能解释吗?

17 楼

因为大家都想着n1,n2,n3的值一样,而实际上可能不一样。

18 楼

不知道从这个方面思考看可不可以:
  设  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。

我来回复

您尚未登录,请登录后再回复。点此登录或注册