patterncppMinor
Arrange three integers from least to greatest
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
Your code would be more readable if you put some spaces with your operators. For example,
Only initialize what you need to initialize. For example,
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).
Note that
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.