首页 > 代码库 > ZOJ 1088
ZOJ 1088
典型的Joseph问题……由于数据范围小,直接暴力就可以解决了……
用到了链表的数据结构……
时间:90毫秒。
#include "stdio.h"#include "string.h"struct lianbiao{ int prev,next;}p[152];const int INF=2147483647;void init(int n){ int i; for(i=2;i<n;i++){ p[i].prev=i-1; p[i].next=i+1; } p[1].prev=n; p[1].next=2; p[n].prev=n-1; p[n].next=1;}void del(int x){ p[p[x].prev].next=p[x].next; p[p[x].next].prev=p[x].prev;}int is_CGB_last(int n,int m){ int cnt,i,tmp; init(n); //printf("\n*******N = %d , M = %d .\n",n,m); cnt=1;tmp=p[1].prev;del(1); //printf("1 ( %d ) ",tmp); while(cnt<n){ //printf("\n**cnt = %d .\n",cnt); for(i=1;i<=m;i++){ tmp=p[tmp].next; } //printf("-> %d ( %d ) ",tmp,p[tmp].prev); cnt++; if((tmp==2)&&(cnt<n))return 0; if((tmp==2)&&(cnt==n)){ //printf("\n"); return 1; } del(tmp); tmp=p[tmp].prev; } printf("\n");}int main(){ int ans[152]; int n,m; memset(ans,0,sizeof(ans)); while(1){ scanf("%d",&n); if(!n)break; if(ans[n]){ printf("%d\n",ans[n]); continue; } for(m=2;m<=INF;m++){ if(is_CGB_last(n,m)){ printf("%d\n",m); ans[n]=m; break; } } } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。