注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙漠里de烟雨

原创分享,禁止转载

 
 
 

日志

 
 

约瑟夫出圈问题--链表法  

2012-09-04 00:38:56|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#include <stdio.h>
#include <malloc.h>

struct person
{
 int data;
 struct person* node;
};

void dowith(int ,int );

int main()
{
 int m = 6, n = 5;
 printf("请输入总共的人数(>2的正整数):");
 scanf("%d",&n);
 printf("请输入数数的数字(>0的正整数):");
 scanf("%d",&m);

 dowith(m,n);

 return 0;
}

void dowith(int m,int n)
{
 struct person* head;
 struct person* p;
 int i;
 for( i=1;i<=n;i++)
 {
  struct person *pee = (struct person*)malloc(sizeof(struct person));
  pee->data = i;
  if(i==1)
  {
   head = pee;
   p = pee;
  }
  else if(i==n)
  {
   p->node = pee;
      pee->node = head;
  }
  else
  {
   p->node = pee;
   p = pee;
  }
 }
 printf("排成圈的序列如下:\n");
 p = head;
 while((p->node) != head)
 {
  printf("%d ",p->data);
  p = p->node;
 }
 printf("%d\n",p->data);

/////////
 
 struct person* pre = head;
 if(m>1) p = pre->node;
 else if(m==1)
 {
  printf("叫数字 %d 出列次序如下:\n",m);
  p = head;
  while((p->node) != head)
  {
   printf("%d ",p->data);
   p = p->node;
  }
  printf("%d\n",p->data); 
  return ;
 }
 else
 {
    printf("输入错误!\n"); 
  return ;
 }

////////// 
 printf("叫数字 %d 出列次序如下:\n",m);
 int k = 2;
 while(pre != p)
 {
  if(k%m==0)
  {
   printf("%d ",p->data);
   pre->node = p->node;
   p = pre->node;
   k = 1;
  }
  else
  {
   pre = p;
   p = p->node;
   k++;
  }
 }
 printf("%d\n",p->data);


}

  评论这张
 
阅读(450)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018