2020-10-07

    科技2025-01-06  11

    7-2 猴子选大王 (20分)

    一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

    输入格式:

    输入在一行中给一个正整数N(≤1000)。

    输出格式:

    在一行中输出当选猴王的编号。

    输入样例:

    11

    输出样例:

    7

    约瑟夫环问题(有动态规划版解法) 

    #include<iostream> #include<cstdio> #include<string> #include<algorithm> #include<cstring> #include<vector> #include<map> #include<set> using namespace std; const int inf=0x3fffffff; const int maxn=10010; const int mod = 1000000000+7; int main(){ int f[1001]={0}; int n,cnt=0; int k=0; cin>>n; for(int i=1; cnt<n-1 ;i++){ if(i==n+1) i=1; while(f[i]) { i++; if(i==n+1) i=1; } k++; if(k==3){ f[i]=1; cnt++; k=0; } } for(int i=1;i<=n;i++){ if(f[i]==0) { cout<<i<<endl; break; } } return 0; }

     

    Processed: 0.009, SQL: 8