#include "stdio.h"
#include "stdlib.h"
void main()
{
char players[20][20];
int isOut[20];
int i;
int count=0;
int num;
int start;
int flag=0;
int outNum=0;
printf("请输入参加出圈游戏人员名单:\n");
for(i=0;i<20;i++)
{
printf("第%d位:",i+1);
scanf("%s",players[i]);
if(players[i][0]=='!')
break;
count++;
}
printf("请输入出圈数字:");
scanf("%d",&num);
printf("请输入起始位置:");
scanf("%d",&start);
printf("共有%d人参加, 出圈数字是:%d, 起始位置是(%d):%s\n",count,num,start,players[--start]);
printf("开始游戏…\n");
for(i=0;i<20;i++)
{
isOut[i]=1;
}
do
{
if(start==count) // 如果循环一周则从零开始!
start=0;
if(isOut[start]!=0) //检测是否出圈,否则
flag++;
if(flag==num)
{
isOut[start]=0;
printf("%s 出圈\n",players[start]);
outNum++;
flag=0;
}
start++;
}while(outNum<count);
}
public class Josephus {
static class Node{
int val;
Node next;
Node(int v){
val=v;
}
}//成员类,代表节点,类似于数据结构中的结构体
public static void main(String[] args) {
int N=9;//这个表示总人数
int M=5;//数到几的人出列
Node t=new Node(1);//头节点单列出来,方便形成循环链表
Node x=t;
for(int i=2;i<=N;i++)x=(x.next=new Node(i));//建立单向链表
x.next=t;//最后一个节点的next指向第一个节点,形成循环链表
System.out.println("出圈的顺序为:");
while(x!=x.next){
for(int i=1;i<M;i++)
x=x.next;
//此时x是将出列的节点的前一个节点
System.out.print(x.next.val+" ");
x.next=x.next.next;
}
System.out.println();
System.out.println("Survivors is "+x.val);
}//end main
}
相关资源:敏捷开发V1.0.pptx