题目
来源CSDN每日题目
有n个人,每人一数,且最从小到大排成数列,叫m次,每次叫的数t, 让数列中第一个大于t 的人报出其数
结果
input join game player count: 5
input round count: 6
every player’s num:
107 136 2491 3440 23380
nums for calling
31295 3435 10003 14278 10010 1416
result:
23380 3440 23380 23380 23380 2491
代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <random>
// 报数游戏
void ShowNumGame() {
int n = 0, m = 0;
std::cout << "input join game player count: ";
std::cin >> n;
if (n <= 0) {
std::cout << "There is no players!!!";
return;
}
std::cout << "input round count: ";
std::cin >> m;
if (m <= 0) {
std::cout << "There is no round!!";
return;
}
std::cout << "every player's num:" <<std::endl;
std::vector<int> player_nums(n);
std::vector<int> call_nums(m);
std::vector<int> result(m);
std::srand(m*n);
for (int i = 0; i < n; ++i){
int n = std::rand();
//std::cout << " " << n;
player_nums[i] = n;
}
std::stable_sort(player_nums.begin(), player_nums.end());
for (int i = 0; i < n; ++i) {
std::cout << " " << player_nums[i];
}
std::cout << std::endl << "nums for calling" << std::endl;
for (int i = 0; i < m; ++i) {
int n = std::rand();
std::cout << " " << n;
call_nums[i] = n;
}
std::cout << std::endl;
for (int i = 0; i < m; ++i) {
int cn = call_nums[i];
auto it = player_nums.begin();
for (; it != player_nums.end() && *it < cn; ++it) {
}
result[i] = (it == player_nums.end()?player_nums[player_nums.size()-1]:*it);
}
std::cout << std::endl << "result:"<< std::endl;
for (auto it : result) {
std::cout << " "<< it;
}
}