Question: 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 <iostream>

using namespace std;

int main()
{
    int x = 0;
    int y = 0;
    int z = 0;
    int first = 0;
    int second = 0;
    int third = 0;
    cout<<"Enter three integers to be arranged from least to greatest.\n";
    cin>>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;
}

```

Answer: 
I've done something similar to this in a introduction to C++ class, so in case you need a **very** simple answer without using some of the more complex functions, I would have condensed it into something like this.

I find this to be a helpful way because it helped me to use complex relational operations (such as `&&`, `||`, `!=`) and it helps simplify some of the conditional statements so they don't end up becoming nested enough times for them to become confusing.

I think using those compound relational operations at the end to determine the smallest of the integers is helpful because it eliminates some of the comparisons in the original code, i.e. 
if `x` is not the smallest AND `x` is not the middle therefore `x` is the smallest.

```
#include <iostream>

using namespace std;

main () {

    int x, y, z;
    int largest, smallest, middle;

    cout << "Enter three integers separated by spaces: ";
    cin >> x >> y >> z;

    if (x > y) {
        if (x > z)
            largest = x;
        else
        if (x < z)
            middle = x;
    }

    if (y > x) {
        if (y > z)
            largest = y;
        else
        if (y < z)
            middle = y;
    }

    if (z > y) {
        if (z > x)
            largest = z;
        else
        if (z < x)
            middle = z;
    }

    if (y != largest && y != middle)
        smallest = y;
    if (x != largest && x != middle)
        smallest = x;
    if (z != largest && z != middle)
        smallest = z;

    cout << "Smallest = " << smallest << endl;
    cout << "Middle = " << middle << endl;
    cout << "Largest = " << largest << endl;

}

```
**Namespace**

`using namespace std;` [is considered bad practice](http://http%20://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice). Short code is not a requirement in C++; clear code is preferred.

**Simplify your code**

Since you are swapping two variables multiple times in the code, it would be nice if you made a function call:

```
swap(int& a, int& b)

```

**Extra variables** 

No need for those first, second, third. It can be done by trick of chain of XOR the target variables twice `a ^= b ^= a ^= b;` to swap them.

Here's the finished code:

```
#include <iostream>
#include <utility>

int main()
{
    int x = 0;
    int y = 0;
    int z = 0;

    std::cout << "Enter three integers to be arranged from least to greatest.\n";
    std::cin >> x >> y >> z;

    if (x > y)  std::swap(x, y);

    if (y > z)  std::swap(y, z);

    if (x > y)  std::swap(x, y);

    std::cout << x << ' ' << y << ' ' << z << '\n';
}

```

My original cryptic XOR swap function, before @5gon12eder suggested using `std::swap`:

```
void swap(int& a, int& b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

```