A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪平乐 高级黑马   /  2013-1-26 23:00  /  2462 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汪平乐 于 2013-2-19 18:14 编辑

菜鸟求解 a= (1- 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 +...+ 1/n - 1/ (n+2)),最好用代码演示..:handshake

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 杨世平 于 2013-1-28 11:18 编辑
  1. public static void main(String[] args) {
  2.                 double result=1;//就是a的值。用于保存最后的结果
  3.                 //想出你的表达式中的共通点,来做循环,100表示次数,一个减号或者加号前的代表一次
  4.                 for(double i=1;i<100;i++){
  5.                         if(i%2==1){//当1%2为1的时候进行相减
  6.                                 result-=(i/(i+2));
  7.                                 System.out.println("-        i:"+i+"                i/(i+2):"+(i/(i+2)));
  8.                         }else{//当1%2为0的时候进行相加
  9.                                 result+=(i/(i+2));
  10.                                 System.out.println("+        i:"+i+"                i/(i+2):"+(i/(i+2)));
  11.                         }
  12.                 }
  13.                 System.out.println(result);
  14. }
复制代码
简单的方法?这算吗?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郭孟涛 于 2013-1-27 00:08 编辑
  1. /*
  2. 题目:解 a= (1- 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 +...+ 1/n - 1/ (n+2))
  3. 分析:
  4. 1.从这个数学表达式中,基本规律是1除以一个奇数循环减加运算。
  5. 2.输的结果是小数类型

  6. 方法:
  7. 1.把n的1个减法看成一个整体,然后做加法循环运算得到结果
  8. 2.给循环赋值100,可任意更改。
  9. 3.n=101时,结果为0.7805909153826847
  10. */

  11. class  Test
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                
  16.                 double a = 0;
  17.                 double n = 1;
  18.                 while (n <= 101) //设定循环
  19.                 {
  20.                         a = 1/n - 1/(n+2) + a ; //把一个减法设为一个小组,使程序更简洁
  21.                         n = n+4; //加4是因为上一步已经做了一次+2运算。
  22.                 }

  23.                 System.out.println("当n等于"+(n-4)+"时,结果是:"+a);
  24.                 // n=101时,结果为 0.7805909153826847
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
杨世平 发表于 2013-1-26 23:50
简单的方法?这算吗?

这里的n是代表单数的..所以没有i%==0这样的..有点小问题:handshake
回复 使用道具 举报
郭孟涛 发表于 2013-1-26 23:54

漂亮..谢谢..
回复 使用道具 举报
哥们,你的通项表达式是不是有误哦,我给你修改了一下
  1. package year2013.day1_27;

  2. /*
  3. * 求解 a= (1- 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 +...+ (-1)^(n+1) /(2n-1);
  4. */

  5. /*
  6. * 思路:
  7. * 1. 用迭代
  8. *
  9. */
  10. public class MathProblem {

  11.         public static void main(String[] args) {
  12.                
  13.                 System.out.println(Add(1));
  14.         }
  15.        
  16.         public static double Add(int n) {
  17.                
  18.                 //确定递归结束条件
  19.                 if(n==1) {
  20.                         return 1;
  21.                 }
  22.                
  23.                 return Math.pow(-1, n+1) / (2*n-1) + Add(n-1);
  24.         }

  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨世平 于 2013-1-28 11:17 编辑
汪平乐 发表于 2013-1-27 23:01
这里的n是代表单数的..所以没有i%==0这样的..有点小问题

:P当正数部分%2的时候,余数只有0或者。我在前面写了,i%2==1的时候进行相减,当他不符合i%2==1的时候就进入else语句块。。。没必要再写i%2==0了吧?。。。
i是代表次数,不代表n前面写错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马