2017-04-18 44 views
0

我正在編寫一個簡單的程序來查找兩個輸入數字之間的奇數總和,我很感激任何反饋。我一直在解決這個問題很長一段時間,我可以使用一些專業知識。查找包含兩個數字之間的機率的總和

import java.util.Scanner; 

class Main { 
    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     System.out.print("#1: "); 
     int num1 = s.nextInt(); 
     System.out.print("#2: "); 
     int num2 = s.nextInt(); 
     int sum = 0; 
     for(int i= num1; i<(num2-num1); i++){ 
      if (i%2 != 0){ 
       sum+=i; 
      } 
     } 
     System.out.print(); 
    } 
} 
+1

如果第一個數字是奇數,您應該先測試。 –

回答

1

有一些簡單的錯誤,你可以在你的代碼在這裏解決。首先,它不應該是(num2-num1),而只是num1。另外,確保你在最後的陳述中打印結果。相比之下,還有很多其他方法可以解決這個問題,但是如果您解決了這些問題,那麼您的簡單方法就可以正常工作。

+0

謝謝。這個解決方案很好。 –

1

我會測試是否num1甚至第一,如果是添加一個使之(否則,它已經爲奇數)。然後增加2,所以你知道每個i奇數。接下來,您的環路測試應該是<= num2(不是< num2 - num1),因爲您需要範圍從num1num2(含)。最後,不要忘記實際打印結果。像,

if (num1 % 2 == 0) { 
    num1++; 
} 
int sum = 0; 
for (int i = num1; i <= num2; i+=2) { 
    sum += i; 
} 
System.out.println(sum); 

或者,在Java 8+,則可能是一個IntStream

System.out.println(IntStream.rangeClosed(num1, num2).filter(x -> x % 2 != 0).sum()); 
+0

感謝您的反饋。我忽略了這樣一個簡單的解決方案。 –

0

你也可以運用,而不是通過所有的數字循環,這是多一些數學做更有效率,併成爲一個恆定時間算法而不是線性時間。

要獲得數字的總和,您可以將兩個數字之間的平均值乘以範圍內元素的數量。

如果兩個數字中的任何一個都是奇數,則可以添加一個或減去一個以達到範圍中的第一個偶數,因此您可以從偶數到偶數進行計算。

例如:從3到12,您將使用4和12.平均值爲8.並且在範圍內有(12-4)/ 2 + 1 = 5個偶數(+1是因爲它是包含範圍)。總和將是8 * 5 = 40。

這是真的:4 + 6 + 8 + 10 + 12 = 40

0
import java.util.Scanner; 
class SumOfOdds 
{ 
     public static void main(String[] args) 
     { 
      Scanner s = new Scanner(System.in); 
      System.out.print("#1: "); 
      int num1 = s.nextInt(); 
      System.out.print("#2: "); 
      int num2 = s.nextInt(); 
      if (num1 % 2 == 0) 
      { 
       num1++; 
      } 
      int sum = 0; 
      for (int i = num1; i <= num2; i+=2) 
      { 
       sum += i; 
      } 
      System.out.println(sum); 
     } 
} 
+0

請增加一些描述回答以獲得對提問者的更好的指導 –

相關問題