约瑟夫算法

xiaoxiao2024-12-20  9

#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
转载请注明原文地址: https://www.6miu.com/read-5021597.html

最新回复(0)