我正在完成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;
}
}
虽然这对我有用,但它看起来像很多代码,我真的很感激这个问题更“简单”。
答案 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;
}
}