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

Is there a simpler way to get three numbers from the user and print them in ascending order?

本文关键字:数字 三个 升序 打印 方法 更简单 获取 那里 用户 有没有      更新时间:2023-10-16

我正在完成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;
}
}

虽然这对我有用,但它看起来就像很多代码,我真的很感激对这个问题进行更"简单"的处理。

您可以将值添加到vector,然后sort它,并按顺序输出值。

#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::cout << "Please enter 3 values" << 'n';
std::vector<int> values;
for (int i = 0; i < 3; ++i)
{
int value;
std::cin >> value;
values.push_back(value);
}
std::sort(values.begin(), values.end());
std::cout << values[0] << ", " << values[1] << ", " << values[2] << 'n';
return 0;
}

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

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

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

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

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);

你可以做这样的事情:

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]);
}

一些规则。

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

如果要按特定顺序放置内容,请对它们进行排序。

如果之后不需要对它们进行未排序,请就地对它们进行排序。

不要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";
}

现在,这会询问用户每个团块有多少个整数。

不使用数组的解决方案:

void order_integer(( { 国际 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;
}

}