Sum odd numbers from a given range[a,b]?

I was practicing with some exercises from UVA Online Judge, I tried to do the Odd sum which basically is given a range[a,b], calcule the sum of all odd numbers from a to b.

I wrote the code but for some reason I don't understand I'm getting 891896832 as result when the range is [1,2] and based on the algorithm it should be 1, isn't it?

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;
    }
}

Upvotes: 1

Views: 1970

Answers (3)

MJay
MJay

Reputation: 11

I don't have Java installed right now, however a simple C# equivalent is as follows: (assign any values in a and 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);

No major dramas, simple n clean.

Upvotes: 1

Clint
Clint

Reputation: 930

Keep it as simple as possible by simply keeping track of the sum along the way, as opposed to storing anything in an array. Use a for-loop and add the index to the sum if the index is an odd number:

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

Upvotes: 1

k_g
k_g

Reputation: 4464

Your stopping condition is only ever checked when your interval's high end is odd.

Move

if (array[i] == (b)) {
    break;
}

out of the if(a % 2 != 0) clause.

In general, I don't think you need an array, just sum the odd values in your loop instead of adding them to the array.

Upvotes: 3

Related Questions