约瑟夫环算法

 C/C++ code 
 
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> #include < stdio.h > #include < malloc.h > #define LEN sizeof(struct node) struct node { int data; struct node * next; } * p, * p1, * h, * r; main() { void ysfh( int n, int k, int m); int n; int k; int m; printf( " 请输入人数n:\n " ); scanf( " %d " , & n); printf( " 请输入编号为k的人开始报号的k的值:\n " ); scanf( " %d " , & k); printf( " 请输入数到m的那人出列的m的值:\n " ); scanf( " %d " , & m); ysfh(n,k,m); } void ysfh( int n, int k, int m) { // 建立一个循环链表 for ( int i = 1 ;i <= n;i ++ ) { p = ( struct node * )malloc(LEN); p -> data = i; if (h == NULL) { h = p; } else { p1 -> next = p; } p1 = p; } p -> next = h; p = h; // 把指针移动到编号为k的那个人上面 for (i = 0 ;i < k;i ++ ) { p1 = p; p = p -> next; } // p1指向了编号为k的那个人 // 找到数到m的那人并且删除 printf( " 删除的数字:\n " ); while (p1 -> next != NULL) // while循环条件肯定有问题,希望高手们看看应该如何写这个条件 { for (i = 0 ;i < m;i ++ ) { r = p1; p1 = p1 -> next; } // r指向的是删除那个数 p1 -> next = r -> next; printf( " %d " ,r -> data); free(r); } printf( " 最后出列的人是:%d\n " ,p1 -> data); }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值