是否有更简单的方法从用户那里获取三个数字并按升序打印它们?

时间:2017-08-08 13:17:41

标签: c++ if-statement

我正在完成Bjarne Stroustrup的书“使用C ++的原理与实践”(第3章练习6)中的练习。您被要求制作一个接受用户输入的程序(3个整数值),并按照从最小到最大的顺序打印3个值。这是我的解决方案,

#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << "Please enter 3 integers: ";
    int num1, num2, num3;
    while (cin >> num1 >> num2 >> num3) {

    if (num1 < num2 && num2 < num3)
        cout << num1 << ", " << num2 << ", " << num3 << endl;

    if (num2 < num1 && num1 < num3)
        cout << num2 << ", " << num1 << ", " << num3 << endl;

    if (num3 < num1 && num1 < num2)
        cout << num3 << ", " << num1 << ", " << num2 << endl;

    if (num1 > num2 && num1 > num3 && num2 < num3)
        cout << num2 << ", " << num3 << ", " << num1 << endl;

    if (num1 > num2 && num1 > num3 && num2 > num3)
        cout << num3 << ", " << num2 << ", " << num1 << endl;

    if (num1 < num2 && num1 < num3 && num2 > num3)
        cout << num1 << ", " << num3 << ", " << num2 << endl;

    if (num1 == num2 && num1 < num3)
        cout << num1 << ", " << num2 << ", " << num3 << endl;

    if (num1 == num3 && num3 < num2)
        cout << num1 << ", " << num3 << ", " << num2 << endl;

    if (num1 == num2 && num1 > num3)
        cout << num3 << ", " << num2 << ", " << num1 << endl;

    if (num1 == num3 && num2 < num3)
        cout << num2 << ", " << num3 << ", " << num1 << endl;

    if (num3 == num2 && num1 < num3)
        cout << num1 << ", " << num2 << ", " << num3 << endl;

    if (num3 == num2 && num1 > num3)
        cout << num3 << ", " << num2 << ", " << num1 << endl;
   }
}

虽然这对我有用,但它看起来像很多代码,我真的很感激这个问题更“简单”。

6 个答案:

答案 0 :(得分:5)

您可以将值添加到ffmpeg -i demo_dir/input.flv -ss 00:00:14.435 -vframes 1 demo_dir/out.png ,然后vector,然后按顺序输出值。

sort

答案 1 :(得分:0)

如果要将数字存储在顺序数据结构(array,lits,deque)中而不是单独的变量中,则可以使用更简单的算法:

  • 对序列进行排序。
  • 按顺序打印序列。

C ++标准库有一个排序算法:std::sort

答案 2 :(得分:0)

功能有助于减少冗余。您可以创建一个函数来获取三个数字并按顺序打印出来。

void PrintNumbers(int a, int b, int c) {
    cout << a << ", " << b << ", " << c << endl;
}

然后你所要做的就是调用方法并以不同的顺序传递数字,而不是每次都重写你的打印逻辑。例如

PrintNumbers(num1, num2, num3);   
PrintNumbers(num2, num3, num1);
PrintNumbers(num3, num2, num1);

此外,如果您研究使用数组,您可以创建一个排序方法,该方法接受一个数组并返回一个已排序的数组。或者,如果您通过引用(而不是按值)查看传递变量。然后你可以编写一个方法,使num1始终是最小的,num2始终是中间的,num3总是最大的。SortNumbers(num1, num2, num3); PrintNumbers(num1, num2, num3); 。这将允许你基本上

使用这两种方法(一种是排序,一种是打印)会将主要功能的这一部分变成基本上两行代码。

int[] sortedNumbers = SortNumbers(myNumbers);
PrintNumbers(sortedNumbers);

或者如果您使用数组(如果可以的话,我建议您使用数组)

{{1}}

答案 3 :(得分:0)

您可以这样做:

int main()
{
    std::vector<int> values;

    for (int i = 0; i < 3; ++i)
    {
        int value;
        std::cin >> value;
        values.push_back(value);
    }
    std::cout << std::fminf(std::fminf(values[0], values[1]), values[2]);
    std::cout << std::fmaxf(std::fminf(values[0], values[1]), std::fminf(values[1], values[2]));
    std::cout << std::fmaxf(std::fmaxf(values[0], values[1]), values[2]);

}

答案 4 :(得分:0)

一些规则。

如果你有一堆数据你想要统一处理 ,除了可能是顺序的,你想要使用一个数组。

如果您想按特定顺序放置内容,请对其进行排序。

如果您之后不需要将它们分类,则可以对它们进行排序。

不要using namespace std;这是一个非常糟糕的习惯。

std::cout << "Please enter 3 integers: ";
int num[3]; // an array of 3 integers
while (std::cin >> num[0] >> num[1] >> num[2] {
  std::sort( std::begin(num), std::end(num) );
  std::cout << num[0] << ", " << num[1] << ", " << num[2] << "\n";
}

std::endl都插入换行符并刷新io缓冲区。只有当你真的想要冲洗缓冲区时才这样做。

我们可以进一步改进上述内容:

enum {count = 3};
int num[count]; // an array of 3 integers
std::cout << "Please enter " << count << " integers: ";
while ( [&]{
  for (int& n:num)
    if (!std::cin >> n) return false;
  return true;
}()) {
  std::sort( std::begin(num), std::end(num) );
  for (int& n:num) {
    if (&n != num) std::cout << ", ";
    std::cout << n;
  }
  std::cout << "\n";
}

现在我可以通过在一个位置更改count来更改我正在使用的整数。计算机科学中有4个数字:0,1,2和无穷大。

现在,我们在编译时硬编码了多少个整数。这有时是一个好主意,有时不是。

std::size_t count; 
std::cout << "How many integers at a time?";
if (!std::cin >> count) return -1;
std::vector<int> num(count); // an array of count integers
std::cout << "Please enter " << count << " integers: ";
while ( [&]{
  for (int& n:num)
    if (!std::cin >> n) return false;
  return true;
}()) {
  std::sort( std::begin(num), std::end(num) );
  for (int& n:num) {
    if (&n != num.data()) std::cout << ", ";
    std::cout << n;
  }
  std::cout << "\n";
}

现在询问用户每个丛有多少个整数。

答案 5 :(得分:0)

我不使用数组的解决方案:

void order_integer(){     int a,b,c;

cout << "Enter 3 integers: \n";
cin >> a >> b >> c;
if (a <= b && a <= c) {
    if (b <= c) cout << a << ' ' << b << ' ' << c << endl;
    if (c <= b) cout << a << ' ' << c << ' ' << b << endl;
}

else if (b <= a && b <= c) {
    if (a <= c) cout << b << ' ' << a << ' ' << c << endl;
    if (c <= a) cout << b << ' ' << c << ' ' << a << endl;
}

else if (c <= a && c <= b) {
    if (a <= b) cout << c << ' ' << a << ' ' << b << endl;
    if (b <= a) cout << c << ' ' << b << ' ' << a << endl;
}

}