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;}





原创粉丝点击