我是C ++的初学者,我使用“编程:使用C ++的原理和实践(第二版)”。提出的问题是: “写一个程序,提示用户输入三个整数值,然后以逗号分隔的数字顺序输出值。如果两个值相同,则应将它们排序在一起。”
#include <iostream>
#include <sstream>
#include<conio.h>
using std::cout;
using std::cin;
int main()
{
int one;
int to;
int tree;
int big = 0;
int med = 0;
int tiny = 0;
cout << "Please enter 3 integer value:\n";
cin >> one >> to >> tree;
{
if (one > to && to > tree)
big == one && med == to && tiny == tree;
if (one > tree && tree > to)
big == one && med == tree && tiny == to;
if (to > one && one > tree)
big == to && med == one && tiny == tree;
if (to > tree && tree > one)
big == to && med == tree && tiny == one;
if (tree > one && one > to)
big == tree && med == one && tiny == to;
if (tree > to && to > one)
big == tree && med == to && tiny == one;
}
cout << "Biggest to smallest: "
<< big << ", " << med << ", " << tiny;
'\n';
_getch();
return 0;
}
当我执行它并输入'1 2 3'时,它将返回'0,0,0'。欢迎提供建议,技巧或提示。谢谢。 编辑:另外,我还没有考虑做问题的第二部分,因为我无法弄清楚第一部分。
答案 0 :(得分:1)
std::sort
(由Richard提出)是一种解决方案,尽管恕我直言,对于3个元素的数据集来说,不需要这么大的枪。对于3个变量,可以展开排序(如OP所尝试的那样),并且各种可用的排序算法可能相差很大(关于比较和交换的顺序),或者不会对这个小样本带来任何改善。
因此,我进行了展开式排序(重新整理了我认为是气泡排序的内容):
#include <iostream>
void sort(int &a, int &b, int &c)
{
if (a < b) std::swap(a, b);
if (b < c) std::swap(b, c);
if (a < b) std::swap(a, b);
}
int main()
{
// any permutation of { 1, 2, 3 } (i.e. any possible order)
int tests[][3] = {
{ 1, 2, 3 },
{ 1, 3, 2 },
{ 2, 1, 3 },
{ 2, 3, 1 },
{ 3, 1, 2 },
{ 3, 2, 1 }
};
// apply sort() to every test set
for (int *test : tests) {
int a = test[0], b = test[1], c = test[2];
std::cout << "a: " << a << " b: " << b << " c: " << c << " sorted: ";
sort(a, b, c);
std::cout << "a: " << a << " b: " << b << " c: " << c << '\n';
}
// done
return 0;
}
输出:
a: 1 b: 2 c: 3 sorted: a: 3 b: 2 c: 1
a: 1 b: 3 c: 2 sorted: a: 3 b: 2 c: 1
a: 2 b: 1 c: 3 sorted: a: 3 b: 2 c: 1
a: 2 b: 3 c: 1 sorted: a: 3 b: 2 c: 1
a: 3 b: 1 c: 2 sorted: a: 3 b: 2 c: 1
a: 3 b: 2 c: 1 sorted: a: 3 b: 2 c: 1