利用环形链表实现 Josephus杀人游戏

利用环形链表实现 Josephus杀人游戏 
  1 #include <stdlib.h>
  2 #include <stdio.h>
  3 #include "circular.h"
  4
  5 void make_n(int n);
  6 void kill_one(int, int);
  7 void main(int argc, char *args[]){
  8     int i=1; //用i来记录当前点数
  9     int n,m;
 10     scanf("%d", &n);
 11     scanf("%d", &m);
 12     make_n(n);
 13     printf("n=%d, m=%d\n",n,m);
 14     list_node();
 15     printf("------------------\n");
 16     kill_one(m, i);
 17    
 18 }  
 19        
 20
 21 void make_n(int n)
 22 {          
 23     link node = malloc(sizeof *node);
 24     for(; n!=0; n--){
 25         node = make_node(n);
 26         insert(node);
 27     }
 28 }  
 29    
 30        
 31 void kill_one(int m, int i)
 32 {  
 33     link head = get_head();
 34     link node = head->next;
 35     int len = 0;
 36     while(node != head){
 37         if(i==m){                                                                                                                                                                                                                                                                                                      
 38             printf("=========ko------------------=%d\n", node->item);
 39             delete(node);
 40             i=0;
 41         }
 42         i++;
 43         node = node->next;
 44     }  
 45     list_node();
 46     head = get_head();
 47     for(node=head; node->next != head; node=node->next){
 48         len++;
 49     }
 50     if(len>=m){
 51         printf("------------------\n");
 52         kill_one(m, i);
 53     }else{
 54         printf("head->next->item=%d\n", head->next->item);
 55     }
 56 }
 57    
  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值