标题:约瑟夫循环
只看楼主
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
结帖率:95.45%
 问题点数:0 回复次数:2 
约瑟夫循环
最近看到论坛里好多约瑟夫循环的问题,其实原理很简单,我发一个以前在书上看到的一个代码,是用静态链表实现的,比较简单,这里以13个人为例
#include <stdio.h>
#define N 13
struct person
{
 int number;
 int nextp;
}link[N+1];
int main()
{
 int i,count,h;
 for(i=1;i<=N;i++)
 {
  if(i==N)
   link[i].nextp=1;  //形成一圈
  else
   link[i].nextp=i+1;  //指示下一个
      link[i].number=i;   //表示自己编号
 }
 printf("\n");
 count=0;
 h=N;
 printf("people leave the circle\n");
 while(count<N-1)
 {
  i=0;
  while(i!=3)
  {
   h=link[h].nextp;
   if(link[h].number)
    i++;
  }
  printf("%4d",link[h].number);
  link[h].number=0;
  count++;
 }
 printf("the last one is  ");
 for(i=1;i<=N;i++)
  if(link[i].number)
   printf("%4d",link[i].number);
  printf("\n");
  return 0;
}





搜索更多相关主题的帖子: include person 约瑟夫 people number 
2015-04-15 23:31
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
得分:0 
怎么改成。手动输入N M的值  用scanf。求解  你的这个是把N的值用宏定义了。M可以用scanf得到。但是N貌似不行啊。

风回小院庭芜绿,柳眼春相续
2015-04-16 16:57
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:0 
很简单,用动态内存分配来构造结构体数组

一片落叶掉进了回忆的流年。
2015-04-16 18:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-444068-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.403087 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved