算法如下:
greatest = std::max(a, secondGreatest = std::max(b, c));
secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest);
这是断言中大多数组合的工作清单:
#include <iostream>
#include <cassert>
int main()
{
int a = 5, b = 10, c = 15;
int greatest = 0, secondGreatest = 0;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 10);
a = 10, b = 5, c = 15;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 10);
a = 15, b = 5, c = 10;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 10);
a = 15, b = 10, c = 5;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 10);
a = 5, b = 15, c = 10;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 10);
a = 10, b = 15, c = 5;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 10);
a = 15, b = 5, c = 5;
greatest = std::max(a, secondGreatest = std::max(b, c));
assert(secondGreatest = std::min(std::max(std::min(b, c), a), secondGreatest) == 5);
return 0;
}