5个值的索引以1
开头,我的任务是打印具有最大值的索引。我已经尝试过以下代码:
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
int cnt = 1;
if (a < b){
a = b;
cnt++;
}
if (a < c){
a = c;
cnt++;
}
if (a < d){
a = d;
cnt++;
}
if (a < e){
a = e;
cnt++;
}
cout << cnt;
}
有没有办法将我的代码简化为更少的行,例如,或者更有效的方式,假设所有值都是&gt; = 0
答案 0 :(得分:5)
这是一个提议的解决方案,它不使用容器,只使用STL算法和迭代器魔法。它也适用于输入的任意数量的数字,而不仅仅是5。
#include <algorithm>
#include <iterator>
#include <iostream>
#include <climits>
int main()
{
int maxv = std::numeric_limits<int>::min();
int high_index;
int curIndex = 1;
std::for_each(std::istream_iterator<int>{std::cin},
std::istream_iterator<int>{}, [&](int n)
{
if (maxv < n)
{
high_index = curIndex;
maxv = n;
}
++curIndex;
});
std::cout << "Highest index: " << high_index;
}
答案 1 :(得分:3)
我的C ++不好,所以将这个答案视为伪代码:
cnt++
答案 2 :(得分:0)
您可以考虑使用drop table if exists t;
create table t(id int, p_id int, payout_date date);
insert into t values
(1 , 2 , '2018-04-21');
select id,p_id,payout_date
from t
union
select id,p_id,date_add(payout_date,interval 1 month)
from t;
+------+------+-------------+
| id | p_id | payout_date |
+------+------+-------------+
| 1 | 2 | 2018-04-21 |
| 1 | 2 | 2018-05-21 |
+------+------+-------------+
2 rows in set (0.00 sec)
。
std::max
我认为它不会比一系列if语句好得多,而不会实际使用数组。
请注意,上面的代码将输出最大数字的 last 实例的索引:如果列表为if ((a = std::max(a, b)) == b) {
cnt = 2;
}
if ((a = std::max(a, c)) == c) {
cnt = 3;
}
if ((a = std::max(a, d)) == d) {
cnt = 4;
}
if ((a = std::max(a, e)) == e) {
cnt = 5;
}
,则输出(5, 5, 5, 5, 1)
。如果您想要最大数字的第一个实例,那么原始代码(适当替换4
)可能已经是最清晰的解决方案。此外,恕我直言,你的解决方案可以说比我刚写的更清楚。