2012-11-15 35 views
2

所以我試圖解決用戶的問題應該輸入任何正數。然後我試着編寫一個程序,只添加奇數,直到用戶輸入的數字顯示總數。例如,如果用戶輸入4,我的程序應該添加四個奇數。 1 + 3 + 5 + 7 = 16.
我唯一可用的工具是語句,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); 
      } 
     } 
    } 
} 
+0

使用變量來存儲您生成的數據的數據,比如「int number = i * 2 + 1;比您可以打印這個變量,或者將其添加到其他變量(總和,無論如何) – hovanessyan

+0

@Jessica M. - dont看看下面的答案,這是一個簡單的問題,試着自己解決,否則編程會成爲你的問題 –

+0

@Fathah謝謝我下次會這樣做,我一直在想這個問題,並認爲我需要做 –

回答

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); 
    } 
} 
+0

我有一個問題,在你的代碼中,數字1,3,5,7被打印出來,因爲if語句if(n == 1)而打印1,而且(1 * 2)+ 1是3.那麼數字1被使用兩次? –

1
sum = 0; 

for (i = 1; i < n*2; i=i+2) 
    sum = sum + i; 
1

這會給你奇數之和。

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

如果要包含n,則將條件更改爲i<=n

0

我會用奇數的循環。

for (int i = 0, j = 1; i < n; i++, j += 2) { 
    println(j); 
    total += j; 
} 
println(total); 
0
int oddSum = 0; 
for (int i = 0; i < n; i++){ 
    oddSum = oddSum + (i*2) + 1; 
} 
1

也許你知道如何計算所有數字的總和達到一定數目n?公式非常簡單:(n * (n+1))/2。現在只得到奇數的總和有點棘手,但 - 不用擔心你只能使用以前的公式。首先,我們注意到,所有的偶數直到達到給定數n之和爲:

  • (((n/2)* (n/2+1))/2) * 2當n爲偶數
  • (即所有的數字多達n/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您只需減去的總和EV恩從所有數字的總和數字:

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

事實上,如果你仔細觀察,你會發現,和1+3+...(2*n-1)總是等於n^2

此答案應該可以幫助您解決所有語言的問題,並且將代碼留給您。這實際上是一條線。