sbhz
来源:互联网 发布:单片机 光耦 编辑:程序博客网 时间:2024/06/05 00:10
题目描述
n只猴子选大王,选举办法如下:从头到尾1,2,3报数,凡报3的退出,余下猴子第二轮从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?
#include<bits/stdc++.h>using namespace std;int n,sum;int a[1201],z[1201],y[1201];int head,tail;int s,t,w,q;//s起指针的作用,t是计数变量,w是s了几只猴子,q是应s的hzbool f;void init(){cin>>n;sum=n;head=1;tail=n;for(int i=1;i<=n;i++){int w,s;w=i-1;s=i+1;if(w==0) w=n;if(s==n+1) s=1;z[i]=w;y[i]=s;}}void hzsb(){//统计还有几只猴子 s=head;//下一个猴子tmd我因为这个用出了静态查错大法!!!t=0;w=0;q=sum/3;//计数(3),判断删hz//头到尾while(q>w)//s了1/3的hz就结束 {s=y[s];t++;if(t==3)//可怜的第三只hzsb {//shz if(z[s]==tail)//尾被s了,换尾 tail=z[z[s]];//shzy[z[z[s]]]=s;z[s]=z[z[s]];sum--;t=0;w++;} } w=0; t=0; if(sum>=3) s=tail; q=sum/3;while(q>w&&sum>=3){s=z[s];t++;if(t==3){ if(s==tail)//换头 head=y[y[s]];//shzz[y[y[s]]]=s;y[s]=y[y[s]];w++;sum--;t=0;}}if(sum>=3) hzsb();//mss,jxsif(!f) {cout<<z[s];f=1;}}int main(){init();hzsb();return 0;}
阅读全文
0 0