注册 登录
编程论坛 C++教室

约瑟夫循环

诸葛欧阳 发布于 2015-04-15 23:31, 684 次点击
最近看到论坛里好多约瑟夫循环的问题,其实原理很简单,我发一个以前在书上看到的一个代码,是用静态链表实现的,比较简单,这里以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;
}





2 回复
#2
纳兰伽香2015-04-16 16:57
怎么改成。手动输入N M的值  用scanf。求解  你的这个是把N的值用宏定义了。M可以用scanf得到。但是N貌似不行啊。
#3
诸葛欧阳2015-04-16 18:58
很简单,用动态内存分配来构造结构体数组
1