C++ 有没有更简单的方法从用户那里获取三个数字并按升序打印?
我正在完成比亚恩·斯特劳斯特普的书《使用C++的原则和实践》(第3章练习6)中的练习。您需要制作一个程序,接受用户输入(3个整数值),并按从最小到最大的顺序打印3个数值。这是我的解决方案C++ 有没有更简单的方法从用户那里获取三个数字并按升序打印?,c++,if-statement,C++,If Statement,我正在完成比亚恩·斯特劳斯特普的书《使用C++的原则和实践》(第3章练习6)中的练习。您需要制作一个程序,接受用户输入(3个整数值),并按从最小到最大的顺序打印3个数值。这是我的解决方案 #include <iostream> #include <string> using namespace std; int main() { cout << "Please enter 3 integers: "; int num1, num2, num3
#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;
}
}
#包括
#包括
使用名称空间std;
int main()
{
cout>num1>>num2>>num3){
如果(num1 cout您可以将值添加到向量
,然后对其进行排序
并按顺序输出值
#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;
}
void PrintNumbers(int a, int b, int c) {
cout << a << ", " << b << ", " << c << endl;
}
#包括
#包括
#包括
int main()
{
std::cout值;
值。推回(值);
}
排序(values.begin(),values.end());
std::cout如果要将数字存储在顺序数据结构(数组、lits、deque)中而不是单独的变量中,则可以使用更简单的算法:
- 对序列进行排序
- 按顺序打印序列
C++标准库有一个排序算法:std::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;
}
void PrintNumbers(int a, int b, int c) {
cout << a << ", " << b << ", " << c << endl;
}
另外,如果您考虑使用数组,您可以创建一个排序方法,该方法接受数组并返回一个排序数组。然后您可以编写一个方法,使num1
始终是最小的,num2
始终是中间的,num3
始终是最大的。这将允许您基本上
拥有这两种方法(一种用于排序,另一种用于打印)将使主函数的这一部分基本上变成两行代码
SortNumbers(num1, num2, num3);
PrintNumbers(num1, num2, num3);
或者如果您使用数组(如果可以,我建议您这样做)
您可以这样做:
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]);
}
intmain()
{
std::向量值;
对于(int i=0;i<3;++i)
{
int值;
标准:cin>>值;
值。推回(值);
}
std::cout一些规则
如果有一组数据需要统一处理,除了可能按顺序处理外,则需要使用数组
如果你想把东西按特定的顺序排列,你可以对它们进行排序
如果您不需要在事后对其进行未排序,则可以将其排序到位
不要使用名称空间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";
}
现在我可以通过在一个点上改变计数来改变我处理的整数的数量。在计算机科学中有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";
}
std::size\u t count;
std::cout>count)返回-1;
std::vector num(count);//计数整数数组
std::cout不使用阵列的我的解决方案:
无效顺序_整数(){
INTA、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;
}
cout>a>>b>>c;
如果(a)使用数组可能会有帮助。数组的排序你可以通过编写一个方法bool-isInOrder(x,y,z)来简化它
返回true
如果x与Ed的数组建议一致,则返回true。在结束前做个混蛋:使用基于范围的for@bolov是的,但是你需要检查在哪里插入逗号,然后…所以我变懒了:)std::sort(开始(值),结束(值))
在我看来总是更自然,但我想这是品味的问题。(对于未来的读者来说,这两种变体的作用完全相同。)作弊:用空格而不是逗号打印:)他在书中还没有涉及向量或数组。我认为这对于他已经教过的内容来说是一个有点奇怪的练习,但是谢谢你的帮助,当他涉及向量或数组时,肯定会回顾一下。你的输出将变得越来越小,仍然有问题。输入4 3 1输出是114慢慢来,伙计..如果你解决了这个问题,我就要投票了:)
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;
}