我正在练习一些来自UVA Online Judge的练习,我试图做奇数和,基本上给出一个范围[a,b],计算从a到b的所有奇数的总和。
我编写了代码,但出于某种原因,我不明白当范围为[1,2]并且根据算法应该为1时,我得到的结果是891896832,isn'是吗?
import java.util.Scanner;
public class OddSum
{
static Scanner teclado = new Scanner(System.in);
public static void main(String[] args)
{
int T = teclado.nextInt();
int[] array = new int[T];
for(int i = 0; i < array.length; i++)
{
System.out.println("Case "+(i+1)+": "+sum());
}
}
public static int sum()
{
int a=teclado.nextInt();
int b = teclado.nextInt();
int array[] = new int[1000000];
for (int i = 0; i < array.length; i++)
{
if(a%2!=0)
{
array[i]=a;
if(array[i]==(b))
{
break;
}
}
a++;
}
int res=0;
for (int i = 0; i < array.length; i++)
{
if(array[i]==1 && array[2]==0)
{
return 1;
}
else
{
res = res + array[i];
}
}
return res;
}
}
答案 0 :(得分:3)
只有当您的间隔高端为奇数时才会检查您的停止条件。
移动
if (array[i] == (b)) {
break;
}
出自if(a % 2 != 0)
条款。
一般来说,我认为你不需要数组,只需将循环中的奇数值相加,而不是将它们添加到数组中。
答案 1 :(得分:1)
我现在没有安装Java,但是一个简单的C#等价物如下:(在a和b中分配任何值)
int a = 0;
int b = 10;
int result = 0;
for (int counter = a; counter <= b; counter++)
{
if ((counter % 2) != 0) // is odd
{
result += counter;
}
}
System.out.println("Sum: " + result);
没有重大的戏剧,简单的干净。
答案 2 :(得分:1)
通过简单地跟踪沿途的总和来保持尽可能简单,而不是将任何内容存储在数组中。如果索引是奇数,请使用for循环并将索引添加到总和中:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter minimum range value: ");
int min = keyboard.nextInt();
System.out.println("Enter maximum range value: ");
int max = keyboard.nextInt();
int sum = 0;
for(int i = min; i < max; i++) {
if(i % 2 != 0) {
sum += i;
}
}
System.out.println("The sum of the odd numbers from " + min + " to " + max + " are " + sum);
}