C++ 实现操场游戏获胜者预测算法
C++ 实现操场游戏获胜者预测算法
上了半天的物理数学课,大家的脑子有点转不动了,下午的课表似乎看透了同学们的心思,第一节就安排了体育课,CZ中学的课表真是太有爱了,赞一个!午间休息后,文体委员小S喊大家到教室外的走廊上排队,队形整好后小S带着大家走到了大操场上,体育老师早就在那等着了,他先安排同学们做了五分钟的准备活动,接下来让大家玩一个有趣的游戏,在这个游戏里,全班同学先散开站在操场上,同学们轮流玩这个游戏,从1号同学开始,然后是2号3号等等(只要这个同学仍然参与这个游戏)。每次轮到玩的同学,就选择一个目前离他最近的同学,走过去拍他一下,然后回到原来的位置,那个被拍到的同学就被排除在游戏之外了,必须立刻离开操场。当操场上只剩下一个同学时,游戏即告结束,最后站在操场上的那个同学就是赢家。
R老师正和隔壁班的F主任津津有味地在场边看着同学们做游戏,为了添加一点乐趣,R老师就和F主任打赌哪个同学会赢?所以他想事先知道谁是赢家。R老师希望你写一个程序,读入同学们相互之间的距离,模拟出哪个同学最终会获胜。
输入数据:
- 第一行是一个正整数N,表示在操场上玩游戏的人数,其中 1 ≤ N ≤ 1000。
- 接下来共有 N 行数据,每行有 N 个用空格隔开的整数,其中第 i 行第 j 列的数据表示操场上编号为 i 的同学与编号为 j 的同学之间的距离。
- 输入数据保证第 i 行第 i 列(主对角线上的位置)的数据均为 0,其余数据均为正整数,且第 i 行第 j 列的数据一定等于第 j 行第 i 列的数据,这意味着同学甲到同学乙的距离等于同学乙到同学甲的距离;操场上任意两对同学之间的距离均不相同,也就是说上三角部分的正整数互不相同。
输出数据:
- 仅有一行包含一个正整数表示获胜的同学的编号。
样例输入:
4
0 16 3
10 4 5
6 4 0 2
3 5 2 0
样例输出:
1
用 C++ 解题内容:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N;
vector<vector<int>> distance(N, vector<int>(N));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> distance[i][j];
}
}
vector<bool> eliminated(N, false);
int remaining = N;
int current = 0;
while (remaining > 1) {
int closest = -1;
int minDistance = INT_MAX;
for (int i = 0; i < N; i++) {
if (i != current && !eliminated[i] && distance[current][i] < minDistance) {
minDistance = distance[current][i];
closest = i;
}
}
eliminated[closest] = true;
remaining--;
current = closest;
}
for (int i = 0; i < N; i++) {
if (!eliminated[i]) {
cout << i + 1 << endl;
break;
}
}
return 0;
}
原文地址: http://www.cveoy.top/t/topic/p57M 著作权归作者所有。请勿转载和采集!