输入任何一个数字,计算这个从1到这个数字里面所以奇数的和,并且显示在屏幕上,内容包含,运行程序所使用时间。例如输入3,计算1+3,输入5,计算1+3+5.输入10000,计算1+3+5+7+9…………。输入负数程序结束。
使用 for, while, recursive,三种语句,分别编写。总共三个程序。 
跪求各位高手不吝赐教。
不是我不想给分,都下载花完了。跪求。

解决方案 »

  1.   

    static int count(int n){
    if(n<0){
    return -1;
    }
    int sum=0;
    double l=System.currentTimeMillis();
    for(int i=0;i<n;i++){
    if(i%2!=0){
    sum+=i;
    }
    }
    double ll=System.currentTimeMillis();
    System.out.println("It needs time:"+(ll-l));
    System.out.println(sum);
    return sum;
    }
      

  2.   

    为什么明明排好序的,发完后顺序变了?不懂!!只做了个for的。
      

  3.   

    for(int i=0;i <=n;i++){ 
    应该有等于号的,不好意思。。
      

  4.   

    int num = 0;
    long time = 0;
    int sum = 0;
    public void Sum()
    {
    time = System.currentTimeMillis(); 
    while(true)
    {
    if(num < 0)
    {
    num = -1;
    return;
    }
    if(num % 2 != 0)
    {
    sum += num;
    }
    num--;
    if(num == 0)
    {
    break;
    }
    }
    time = System.currentTimeMillis() - time;

    System.out.println("NUM中把有奇数和:" + time + "---把用时间为:" + time);
    }
      

  5.   

    你创建一个新的类,然后在main方法里调用不就行了。
      

  6.   

    public class RepeatTest {    public static void main(String[] args) {
            int k = 77;
            OddSum[] oddSums = {
                    new ForOddSum(), new WhileOddSum(),
                    new RecursiveOddSum(), new MathOddSum()
                };
            for(int i = 0; i < oddSums.length; i++) {
                System.out.println(
                        oddSums[i].getClass().getSimpleName() + ": " +
                        oddSums[i].sum(k)
                    );
            }
        }
    }interface OddSum {
        public int sum(int num);
    }abstract class AbstractOddSum implements OddSum {
        public int sum(int num) {
            if(num % 2 == 0) {
                num--;
            }
            return oddSum(num);
        }
        protected abstract int oddSum(int num);
    }class ForOddSum extends AbstractOddSum {
        protected int oddSum(int num) {
            int result = 0;
            for(int i = 1; i <= num; i += 2) {
                result += i;
            }
            return result;
        }
    }class WhileOddSum extends AbstractOddSum {
        protected int oddSum(int num) {
            int result = 0;
            while(num > 0) {
                result += num;
                num -= 2;
            }
            return result;
        }
    }class RecursiveOddSum extends AbstractOddSum {
        protected int oddSum(int num) {        
            return innerSum(num, 0);
        }
        
        private int innerSum(int num, int result) {
            if(num < 0) {
                return result;
            }
            result += num;
            return innerSum(num - 2, result);
        }
    }class MathOddSum extends AbstractOddSum {
        protected int oddSum(int num) {
            int k = (num + 1) / 2;
            return k * k;
        }
    }
      

  7.   

    上面最后一个有点问题,改正一下:class MathOddSum extends AbstractOddSum {
        protected int oddSum(int num) {
            if(num < 1) {
                return 0;
            }
            int k = (num + 1) / 2;
            return k * k;
        }
    }
      

  8.   

    哎,还是不大好,改正之:abstract class AbstractOddSum implements OddSum {
        public int sum(int num) {
            if(num < 1) {
                return 0;
            }
            if(num % 2 == 0) {
                num--;
            }
            return oddSum(num);
        }
        protected abstract int oddSum(int num);
    }