首页 > 解决方案 > 我们如何在数据集中找到满足给定条件的元素及其在数据集中的序号(C++)?

问题描述

标准输入的第一行包含元素数 (N) (1<=N<=100)。接下来的行包含一个数字 (M) (1<=M<=300),我们知道,最多可以有 100 个“M”元素。

我们需要找到大于 120 的最小数字。在标准输出的第一行中,我们需要打印序列号(即“M”号)和该元素的值,并且之间应该有一个空格他们。如果没有满足给定条件的数字,则程序应打印 -1。如果满足条件的元素更多,则程序应打印序号较小的元素。我们应该得到与示例完全相同的输出,否则它不起作用。

例如:

输入:

6

118

200

199

116

200

122

输出:6 122

到目前为止,我认为我编写了以下代码,它将小于 120 的数字放入向量中。由此,我们需要梳理出正确的元素并给出条件。我不确定这段代码是否适用于排序大于 120 的数字,但我编写这段代码是为了表明,我已经尝试了很长时间,但我真的被卡住了。

#include <iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v;
int N, M, counter = 0;
cin >> N >> M;
for (int i = 0; i < N; i++) {
if (M < 120) {
counter++;
v.push_back(i+1);
}
}
for (vector<int>::iterator itr = v.begin(); itr != v.end(); ++itr)
{

}
return 0;

}

请记住,我还是初学者,所以请以这种方式回答我的问题。感谢您的任何帮助。

标签: c++arraysalgorithmsortingfor-loop

解决方案


这是我在阅读您的问题并查看输入后想到的。我认为你在你的问题中犯了一个小错误 - 它应该是大于 120 的最小数字。查看下面给出的代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, ans = INT_MAX, pos = -1;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    if (x > 120 && x < ans) {
      ans = x;
      pos = i + 1;
    }
  }
  if (pos != -1)
    cout << pos << ' ' << ans;
  else
    cout << -1;
}

推荐阅读