logo资料库

所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到....doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
第一种方法:利用循环链表
第二种方法:数组
第三种是普通方法for循环
题目 山上有 m 只猴子要选大王,选举办法如下:所有猴子从 1 到 m 进行 编号并围坐一圈,从第一号开始按顺序 1,2,...n 继续报数,凡是报 n 号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时, 这只猴子就是大王.输出大王的编号。 第一种方法:利用循环链表 //共有 8 只猴子 //数到 3 只时退出第三只 #include #include #define M 8 #define N 3 typedef struct monkey {int number; int flag; struct monkey* next; }MONKEY; main() { MONKEY *head=NULL,*p,*s; //清屏 int i,sum=0,count=0; clrscr(); p=(MONKEY *)malloc(sizeof(MONKEY)); p->number=1;p->flag=1; p->next=head; head=p; for(i=2;i<=M;i++) //分配内存 { s=(MONKEY *)malloc(sizeof(MONKEY)); s->number=i;s->flag=1; s->next=head; p->next=s;p=p->next; } p=head; for(;;) {if(p->flag==1) count++; if(count==N)
{p->flag=0; count=0; sum++;} if(sum==M-1) break; p=p->next; } p= head; for(i=1;i<=M;i++) { if(p->flag==1) printf("\t%d",p->number); p=p->next; } } 第二种方法:数组 #include #define M 8 struct monkey {int number; int nextp; }link[M+1]; void main() {int i,count,h; for(i=1;i<=M;i++) { if(i==M) link[i].nextp=1; else link[i].nextp=i+1; link[i].number=i; } printf("\n"); count=0; h=M; printf("依次退出的猴子: \n"); while(count
{i=0; while(i!=3) { h=link[h].nextp; if(link[h].number) i++;} printf("%4d",link[h].number); link[h].number=0; count++; } printf("\n 大王是:"); for(i=1;i<=M;i++) if(link[i].number) printf("%3d\n",link[i].number); } 第三种是普通方法 for 循环 #include void main() { int i,k,m,n,num[50],q,*p; clrscr(); printf("input number of person: n="); scanf("%d",&n); printf("\ninput number of person when how many monkey exit: q="); //输入数到 q 只时退出第三 只 scanf("%d",&q); p=num; for(i=0;i
} i++; if(i==n)i=0; } while(*p==0)p++; printf("The last one is NO:%d\n",*p); getch(); } #include void main() { int m,n; puts("输入猴子的个数:"); scanf("%d",&m); puts("输入报数:"); scanf("%d",&n); void choice(int m,int n); choice(m,n); } void choice(int m,int n) { int i,j=-1; int num=1; int s[100]; for(i=0;i
if(s[i]==0) printf("%d 号是猴子王!!",i+1); } #include void main() { int n,m,i,j,s; int a[10000]; printf("请输入人数:"); scanf("%d",&m); printf("请输入报数:"); scanf("%d",&n); for(i=0;i void main() { int n,m,i,j,s,Y; int a[10000]; printf("请输入人数:"); scanf("%d",&m);
printf("请输入报数:"); scanf("%d",&n); for(i=0;i #define M 10 main() { int n,result; int count=0; //printf("猴子数:"); //scanf("%d",&m); printf("报数值:"); scanf("%d",&n); bool monkeys[M]={false};
while(1) { bool done=true; for(int i=0;i
分享到:
收藏