/************************************************************** * Copyright (c) 2013, 西华师范大学计算机学院 * All rights reserved. * 作 者: 曾舜尧 * 完成日期:2013 年 05 月 26 日 * 工 具:VC6.0 * * 输入描述: * 问题描述:通过链表实现,13个人围成一圈,从第一个开始顺序报号1、 * 2、3.凡报到3者推出圈子找出最后留在圈子中的人的序号。 * 程序输出: * 问题分析:略 * 算法设计:略 **************************************************************/ #include <stdio.h> #include <stdlib.h> struct Man /*定义结构体*/ { int n; /*计数*/ int tag; /*标记*/ struct Man *next; /*指向下一个*/ }; int main() { struct Man* create(struct Man *head,int n); struct Man* select(struct Man *head,int n,int e); struct Man *man=NULL,*p=NULL; int pos=3; const int n=13;/*共计13个对象*/ man=create(man,n); man=select(man,n,pos); /*遍历那个特殊数*/ for (p=man;!(p->tag);p=p->next);/*p->tag==0*/ printf("通过链表实现,猴子选大王问题。。。。\n"); printf("那个特殊数是%d \n",p->n); system("pause"); return 0; } struct Man* create(struct Man *head,int n) { int i=0; struct Man *p=NULL,*q=NULL; while (i++<n)/*控制循环,创建13个对象*/ { if (i==1) { p=malloc(sizeof(struct Man)); q=p; head=p; } else { p=malloc(sizeof(struct Man)); q->next=p; q=p; } p->n=i; p->next=NULL; p->tag=i; } p->next=head; //printf("循环了%d次\n",p->n);/*检验循环*/ return head; } struct Man* select(struct Man *head,int n,int e) { struct Man *p; int i=0; int j=0; p=head; while (i<n-1) /*i==0*/ { j=0; /*第一种方法标记淘汰的*/ /*while (1) { if(p->tag) //p->tag!=0 j++; if(j==e) break; p=p->next; }*/ /*第二种方法标记淘汰的*/ for (j=0;j!=e;(p->tag!=0)?j++:1,j!=3?(p=p->next):p); //printf(" 删除的ID%3d ",p->n);/*检验循环*/ p->tag=0; i++; p=p->next; } return p; }
通过链表实现,13个人围成一圈,从第一个开始顺序报号1、2、3.凡报到3者推出圈子,找出打印并最后人的序号
原创
©著作权归作者所有:来自51CTO博客作者zengshunyao的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:凯文·米特尼克的建议
下一篇:统计数字问题
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
我一个人
一个人。。。。。
空间 职场 感情 情感 休闲 -
Python编程实现500个人围成一圈 python围圈数数
目录python围圈报数一、题目要求1、编程实现2、输入输出3、评分标准二、解题思路1、案例分析2、流程分析三、程序代码四、运行结果五、考点分析python围圈报数2020年青少年组python蓝桥杯省赛模拟题一、题目要求1、编程实现有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子。然后继续从1到3报数,指导最后留下一个人游戏结束,问最后留下的人原来排在第几号。
Python编程实现500个人围成一圈 python蓝桥杯真题 蓝桥杯python真题 python围圈报数 python省赛题目