我的 if 语句逻辑出了什么问题?
What's wrong in my if statements logic?
在这个小程序中,我尝试按降序对 3 个数字进行排序。但似乎将"//3 2 1 - 不起作用"作为评论的行没有按预期工作。看来我的逻辑是正确的。
我的输入:4, 554 和 454545
输出:(这不是我想要的) 554, 454545 和 4
如果整数 numbThree 上的值大于 numbOne,如果 numbOne 不大于 numbTwo(不是== else),它应该按此顺序输出 numbThree、numbTwo 和 numbOne,为什么它不起作用?
#include <iostream>
int main() {
int numbOne = 0, numbTwo = 0, numbThree = 0;
std::cin >> numbOne >> numbTwo >> numbThree;
if (numbOne > numbTwo) {
if (numbTwo > numbThree) {
std::cout << numbOne << " " << numbTwo << " " << numbThree << std::endl; // 1 2 3
}
else {
std::cout << numbOne << " " << numbThree << " " << numbTwo<< std::endl; // 1 3 2
}
}
else if (numbTwo > numbOne) {
if (numbOne > numbThree) {
std::cout << numbTwo << " " << numbOne << " " << numbThree << std::endl; // 2 1 3 - works
}
else {
std::cout << numbTwo << " " << numbThree << " " << numbOne << std::endl; // 2 3 1
}
}
else if (numbThree > numbOne) {
if (numbOne > numbTwo) {
std::cout << numbThree << " " << numbOne << " " << numbTwo << std::endl; // 3 1 2
}
else {
std::cout << numbThree << " " << numbTwo << " " << numbOne << std::endl; // 3 2 1 - doesn't work
}
}
std::cin.get();
std::cin.ignore();
return 0;
}
提前感谢您帮助我。
一般来说,您不能通过 3 个比较对 2 个数字进行排序(在信息内容方面,请参阅YSC的评论)。你的案例1 3 2
已经有缺陷了:如果numbThree > numbOne
怎么办?
通常,您最多必须允许3个比较。当然,您可以简单地使用标准库(即语言)提供的排序功能。如果您不想(出于某种原因),那么正确的逻辑(升序)是
if(a<b)
if (b<c) // a,b,c // 2 comparisons
else if(a<c) // a,c,b // 3 comparisons
else // c,a,b // 3 comparisons
else
if( (a<c) // b,a,c // 2 comparisons
else if(b<c) // b,c,a // 3 comparisons
else // c,b,a // 3 comparisons
因此,在 6 种可能的情况下,有 4 种需要 3 次而不是 2 次比较。
不是作为答案,而是作为Sam Varshavchik评论的说明:
问题是代码应该使用一个小数组,并且 std::sort, 而不是这种意大利面条代码。
虽然 Sam 对生产代码的看法是正确的,但作为如何实现逻辑的练习,这个问题没问题,并且已经有解决方案。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v(3);
if (! (std::cin >> v[0] >> v[1] >> v[2])) { exit(-1); }
std::sort(v.begin(), v.end(), std::greater<int>());
for (auto c: v) { std::cout << c << " "; }
std::cout << "n";
}
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了