分离并打印出偶数和奇数随机数

问题描述 投票:0回答:1

我已经生成了100个随机数,其中我必须缩短随机数的相等偶数和奇数。所有偶数或奇数不能重复。

例如,我将创建100个随机数

#include <iostream>   
#include <cstdlib>    

int main()
{
  for (int i=1; i <=100; ++i){

      //double p = rand();
      std::cout <<"random number is :" << rand()<<std::endl;


  }


}

由于我不知道100个随机数中列表中的偶数和奇数是否相同,因此我想选择最小的偶数和奇数对。我也想知道分别生成的总奇数和偶数。需要注意的是,例如,如果多次打印出任何偶数或奇数,我想将其视为一个。

例如。假设打印出的随机数有60个偶数和40个奇数。而且从60个偶数中也有10个偶数是重复的。因此,我认为不同的事件编号是50。打印出的编号将是前20个偶数和前20个奇数。

之所以这样做,是因为我想学习如何从随机生成器的for循环中滤除偶数和奇数。

更新:

我的目标是从生成的随机数中找到偶数和奇数。当我短缺偶数和奇数时,所有的偶数和奇数都将不同。这意味着,如果我发现偶数2被打印了5次,我仍然会考虑那个。这样,我想找到偶数和奇数的最小数量。

让我们举个例子:

生成的打印输出为:{1,2,2,3,4,5,6,8,9,3,2,4,6,10}

从列表中的偶数和奇数将是:

even = {2,4,6,8}奇数= {1,3,5,9}

[如果仔细看,我从空头中排除了10个。原因是,如果我在偶数列表中加10,我的奇偶数将更多。

c++ random
1个回答
0
投票

使用unorderd_set创建奇数和偶数集

检查数字是否为奇数= num%1

std::unordered_set<int> set_odd;
std::unordered_set<int> set_even;
for (int num : nums) {
    if (num & 1) set_odd.insert(num);
    else set_even.insert(even);
}

0
投票

这将按照您在示例中的说明进行。

#include <set>
#include <vector>

int main()
{
  std::vector<int> numbers = {1, 2, 2, 3, 4, 5, 6, 8, 9, 3, 2, 4, 6, 10};
  std::set<int> even, odd;

  // sort the numbers into even and odd sets
  for (auto const& n : numbers)
  {
    if (n % 2 == 0)
      even.insert(n);
    else
      odd.insert(n);
  }

  // figure out which set is smaller
  int min = std::min(even.size(), odd.size());

  // print out the evens
  std::cout << "even = ";
  auto it = even.begin();
  for(int i = 0; i < min; ++i)
  {
    std::cout << *(it++) << " ";
  }
  std::cout << std::endl;

  // print out the odds
  std::cout << "odd  = ";
  it = odd.begin();
  for(int i = 0; i < min; ++i)
  {
    std::cout << *(it++) << " ";
  }
  std::cout << std::endl;
}
© www.soinside.com 2019 - 2024. All rights reserved.