Start learning free

LESSON 129 OF 409 · LOOPS & CONDITIONALS

Print Odd Numbers: Buggy Code in C++ (Time Complexity: O(n))

Practice Read the full explanation

Inside the code editor we've tried to write a function that takes a number n as argument and prints to the console the odd numbers from 0 through n.

So when we called printOddNumbers(8), we expected our code to print:

1
3
5
7

but it seems like we made some mistakes because when we run our code, it prints nothing.


Assignment:

Your task is to fix our function such that it prints the odd numbers from 0 through n.

STEP 1 OF 1
    Ctrl + Enter to check

    C++ · LOOPS & CONDITIONALS

    Buggy Code Print Odd Numbers in C++, explained

    Understanding the Problem

    The core challenge here is to correctly identify and print all odd numbers from 0 to a given number n. This problem is significant in learning how to handle loops and conditionals in C++. Common applications include filtering data based on specific criteria.

    Potential pitfalls include misunderstanding the range of numbers to check and incorrectly implementing the loop or condition to identify odd numbers.

    Approach

    To solve this problem, we need to iterate through all numbers from 0 to n and print only those that are odd. An initial naive solution might involve checking each number and printing it if it is odd. This approach is straightforward and efficient for this problem size.

    We can optimize this by starting our loop from 1 and incrementing by 2, thus directly iterating over odd numbers only. This reduces the number of iterations by half.

    Naive Solution

    1. Loop through all numbers from 0 to n.

    2. Check if a number is odd using the modulus operator.

    3. Print the number if it is odd.

    Optimized Solution

    1. Start the loop from 1 and increment by 2.

    2. Print each number directly as it is guaranteed to be odd.

    Algorithm

    Here is a step-by-step breakdown of the optimized algorithm:

    1. Initialize a loop starting from 1 and ending at n.
    2. Increment the loop counter by 2 in each iteration.
    3. Print the current value of the loop counter.

    Code Implementation

    
    #include <iostream>
    
    // Function to print odd numbers from 0 to n
    void printOddNumbers(int n) {
        // Start from 1 and increment by 2 to get only odd numbers
        for (int i = 1; i <= n; i += 2) {
            std::cout << i << std::endl; // Print the current odd number
        }
    }
    
    int main() {
        int n = 8;
        printOddNumbers(n); // Expected output: 1, 3, 5, 7
        return 0;
    }
    

    Complexity Analysis

    The time complexity of the optimized solution is O(n/2), which simplifies to O(n). The space complexity is O(1) as we are not using any extra space proportional to the input size.

    Edge Cases

    Consider the following edge cases:

    • n = 0: The function should print nothing.
    • n = 1: The function should print 1.
    • Negative values of n: The function should print nothing as there are no positive odd numbers in the range.

    Testing

    To test the solution comprehensively, consider the following test cases:

    • printOddNumbers(0): Expected output is nothing.
    • printOddNumbers(1): Expected output is 1.
    • printOddNumbers(8): Expected output is 1, 3, 5, 7.
    • printOddNumbers(-5): Expected output is nothing.

    Thinking and Problem-Solving Tips

    When approaching such problems, always start by understanding the requirements and constraints. Break down the problem into smaller parts and think about the simplest way to solve each part. Practice similar problems to improve your problem-solving skills.

    Conclusion

    In this blog post, we discussed how to fix a buggy function to print odd numbers from 0 to n. We explored both naive and optimized solutions, provided a detailed algorithm, and analyzed the complexity. Understanding and solving such problems is crucial for developing strong programming skills.

    Additional Resources

    Keep going with C++About 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free