首页 > 代码库 > sicily 猴子选大王
sicily 猴子选大王
题目描述
猴子选大王,有N只猴子,从1~N进行编号。它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数。第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1。如果一只猴子报的数字是M,则该猴子出列,下一只猴子重新从1开始报数。剩下的猴子继续排成一个圆圈报数,直到全部的猴子都出列为止。最后一个出列的猴子胜出。
输入格式
The first line is an integer t, indicating the number of test cases. Then there are t lines and each line contains two positive integer N(0<N<=100) and M(0<M<=100).
输出格式
For each test case, print out the number of the Monkey King.
样例输入
将样例输入复制到剪贴板
25 24 3
样例输出
31
--------------------------我不是分割线--------------------------------------------------------------
分析:开始时并没有考虑太多,就选择了用struct的数组来简单实现,不过时间上耗费略大
#include <iostream>#include <algorithm>#include <cstring>using namespace std;struct data{ int count; bool is;};int cmp(data a[],int n){ int count1=0,out; for (int i = 0; i < n; ++i) { if (a[i].is==0) { ++count1; out=a[i].count; } } if (count1==1) { return out; } else{ return 0; }}int main(int argc, char const *argv[]){ int t; cin>>t; for (int i = 0; i < t; ++i){ int m,n; cin>>m>>n; data monkey[m]; for (int i = 0; i <m; ++i) { monkey[i].count=i+1; monkey[i].is=0; } int ji=0;int count2=0;int i=0; int isf=cmp(monkey,m); while(!isf){ if (monkey[i].is==0) { ++count2; if (count2==n) { monkey[i].is=1; count2=0; } } ++i; if(i==m){ i=0;/*实现循环,保证由count2来决定循环撤出的有效性*/ } isf=cmp(monkey,m); } cout<<isf<<endl; } return 0;}
sicily 猴子选大王
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。