c++ - 编写程序,导入三个浮点数a、b和c。按升序排序
问题描述
#include <iostream>
using namespace std;
int main()
{
float a,b,c,maxx,minn;
cin>>a>>b>>c;
maxx=a;
if (b>maxx) (maxx=b);
if (c>maxx) (maxx=c);
minn=b;
if (a<minn) (minn=a);
if (c<minn) (minn=c);
cout<<minn<<" "<<maxx ;
}
我不知道如何打印 和 之间的max
数字min
。
解决方案
您应该尽可能使用 stl 容器和算法。这可以为您节省大量工作和问题。您的问题已经存在一个功能。在您的描述中,您要求对值进行排序。在提供的代码中,您只要求最小值和最大值。最小/最大解决方案是:
#include <algorithm>
#include <iostream>
int main() {
std::array<float, 3> a;
std::cin >> a[0] >> a[1] >> a[2];
auto [a_min, a_max] = std::minmax({a[0], a[1], a[2]});
std::cout << "Min: " << a_min << "\nMax: " << a_max << '\n';
return 0;
}
std::minmax
需要一个值列表并返回一个std::pair
带有最小值和最大值的值。它不会改变容器。auto [a_min, a_max]
是一个结构化绑定,它将对的第一个值存储在 中a_min
,第二个值存储在a_max
.
这是排序问题的解决方案
#include <algorithm>
#include <iostream>
int main() {
std::array<float, 3> a;
std::cin >> a[0] >> a[1] >> a[2];
std::sort(std::begin(a), std::end(a));
for (const auto &el : a) {
std::cout << el << ' ';
}
return 0;
}
std::sort
期望在容器的开头有一个迭代器,在容器的末尾有一个迭代器。它将对您的实际容器进行排序,并且不提供已排序的副本。基于范围的 for 循环
for (const auto &el : a) {
是一种迭代容器的简单方法。
另外要修复您当前的代码,您可以添加一个新变量:
#include <iostream>
int main() {
float a, b, c;
std::cin >> a >> b >> c;
float maxx = a;
if (b > maxx) { maxx = b; }
if (c > maxx) { maxx = c; }
float minn = b;
if (a < minn) { minn = a; }
if (c < minn) { minn = c; }
float midd = c;
if (a > minn && a < maxx) { midd = a; }
if (b > minn && b < maxx) { midd = b; }
std::cout << minn << ' ' << midd << ' ' << maxx;
}
推荐阅读
- laravel - Laravel 安装在子文件夹和 Horizon 中不起作用
- python - 如何解决 AssertionError 以使用运行长度编码将字符串字符转换为字节?
- python - 使用 Tkinter 时,NoneType 对象在 Python 中没有属性“销毁”错误
- c# - Lock 和 Mutex 显示不同的结果
- java - ExecutorService 和 Future 正在阻塞主线程
- ios - 使用 Audiokit v5 实现麦克风分析
- ios - UIBarButtonItem 隐藏元素和它占用的空间
- c# - Canvas ActualWidth 和 ActualHeight 以 MVVM 方式传入 ViewModel
- r - R - 查找第 2 组(对)的集群
- xamarin.forms - Xamarin.Forms 选中时禁用 Shell TabBar 字体缩放