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


原文地址: https://www.cveoy.top/t/topic/p57P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录