2

所以我试图解决用户的问题应该输入任何正数。然后我正在尝试编写一个程序,只将奇数加到用户输入的数字上并显示总数。因此,例如,如果用户输入 4,我的程序应该添加四个奇数。1 + 3 + 5 + 7 = 16。
我唯一可用的工具是 for 语句、if、if/else if、while 循环和 println。

我只能弄清楚如何打印出奇数。我知道我想创建一个名为 total 的变量来存储将所有奇数相加的值,但我不知道它如何适合程序。

import acm.program.*;

public class AddingOddNumbers extends ConsoleProgram {
    public void run() {
        int n = readInt("enter a positive nunber: ");
        int total = 0;
        for (int i = 0; i < n; i++) {
            if (n == 1) {
                println(1);
            } else {
                println((i * 2) + 1);
            }
        }
    }
}
4

6 回答 6

2
import acm.program.*;

public class AddingOddNumbers extends ConsoleProgram {
    public void run() {
        int n = readInt("enter a positive nunber: ");
        int total = 0;
        for (int i = 0; i < n; i++) {
            if (n == 1) {
                println(1);
            } else {
                println((i * 2) + 1);
                total += (i * 2) + 1;
            }
        }
        println("total : " + total);
    }
}
于 2012-11-15T10:51:20.667 回答
1
sum = 0;

for (i = 1; i < n*2; i=i+2)
    sum = sum + i;
于 2012-11-15T10:51:32.097 回答
1

这会给你奇数的总和。

  if (n>0) 
   {
    total=0;
      for (int i = 1; i < n; i ++){
        if (i%2 == 1)
            total+=i;
      }
   }

如果要包含 n,则将条件更改为i<=n

于 2012-11-15T10:51:39.283 回答
1

也许您知道如何计算给定数字之前的所有数字的总和n?公式很简单:(n * (n+1))/2. 现在只得到奇数的总和有点棘手,但不用担心,你可以只使用前面的公式。首先请注意,直到给定数 n 的所有偶数之和为:

  • (((n/2)* (n/2+1))/2) * 2如果 N 是偶数(即所有数字的总和最多 n/2 乘以 2,那是因为你有2+4+6+8+...N = 2*(1+2+3+...n/2)
  • ((((n-1)/2)* ((n-1)/2+1))/2) * 2如果 N 是奇数

事实上,如果你有整数除法,公式总是:(((n/2)* (n/2+1))/2) * 2 = (n/2)* (n/2+1)

因此,要计算直到 n 的所有奇数的总和,您只需从所有数字的总和中减去偶数的总和:

(n * (n+1))/2 - (n/2)*(n/2+1)

事实上,如果你仔细观察,你会发现总和1+3+...(2*n-1)总是等于n^2

这个答案应该可以帮助您解决所有语言的问题,我将代码留给您。它实际上是一条线。

于 2012-11-15T10:58:15.087 回答
0

我也会对奇数使用循环。

for (int i = 0, j = 1; i < n; i++, j += 2) {
    println(j);
    total += j;
}
println(total);
于 2012-11-15T10:53:52.367 回答
0
int oddSum = 0;
for (int i = 0; i < n; i++){
  oddSum = oddSum + (i*2) + 1;
}
于 2012-11-15T10:55:03.930 回答