HiveBrain v1.2.0
Get Started
← Back to all entries
patterncppMinor

Arrange three integers from least to greatest

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
threefromgreatestarrangeleastintegers

Problem

I'm a C++ beginner and I was told to make a program to arrange three integers from least to greatest. How did I do?

#include 

using namespace std;

int main()
{
    int x = 0;
    int y = 0;
    int z = 0;
    int first = 0;
    int second = 0;
    int third = 0;
    cout>x>>y>>z;

    if(x <= y)
    {
        if(x <= z)
        {
            first = x;
            if(y <= z)
            {
                second = y;
                third = z;
            }
            else
            {
                third = y;
                second = z;
            }
        }
        else
        {
            second = x;
            if(y <= z)
            {
                first = y;
                third = z;
            }
            else
            {
                third = y;
                first = z;
            }
        }
    }
    else
    {
        if(x <= z)
        {
            second = x;
            if (y <= z)
            {
                first = y;
                third = z;
            }
        }
        else
        {
            third = x;
            if ( y <= z)
            {
                first = y;
                second = z;
            }
            else
            {
                second = y;
                first = z;
            }
        }
    }
    cout<<first<<second<<third;
}

Solution

Input/output

You need to output a space between the numbers, otherwise they will look like one long number. It's also customary to finish the output with a newline.

You should verify that you actually received three inputs successfully.

Lint

using namespace std; is considered a bad habit.

Your code would be more readable if you put some spaces with your operators. For example, cin>>x>>y>>z; would look better as std::cin >> x >> y >> z;

Only initialize what you need to initialize. For example, int x, y, z; is enough — in fact it's safer, because the compiler can then warn you if you subsequently use one of those variables without assigning a value.

Strategy

You've basically manually written out all the possible comparisons that a sorting algorithm would do, the long way. I suggest the following short solution (which doesn't generalize beyond three numbers).

#include 
#include 

int main()
{
    int x, y, z;
    std::cout > x >> y >> z))
    {
        std::cerr << "Error in input.\n";
        return 1;
    }

    int first = std::min({x, y, z});
    int third = std::max({x, y, z});

    // Toss x, y, z into a bag, and take out the min and max.
    // What's left is the middle number.
    int second = x ^ y ^ z ^ first ^ third;

    std::cout << first << ' ' << second << ' ' << third << std::endl;
}


Note that std::min({x, y, z}) uses C++11. For older compilers, you can use std::min(x, std::min(y, z)).

Code Snippets

#include <algorithm>
#include <iostream>

int main()
{
    int x, y, z;
    std::cout << "Enter three integers to be arranged from least to greatest.\n";
    if (!(std::cin >> x >> y >> z))
    {
        std::cerr << "Error in input.\n";
        return 1;
    }

    int first = std::min({x, y, z});
    int third = std::max({x, y, z});

    // Toss x, y, z into a bag, and take out the min and max.
    // What's left is the middle number.
    int second = x ^ y ^ z ^ first ^ third;

    std::cout << first << ' ' << second << ' ' << third << std::endl;
}

Context

StackExchange Code Review Q#109355, answer score: 5

Revisions (0)

No revisions yet.