搜索
查看: 677|回复: 2
打印 上一主题 下一主题

约瑟夫环的代码

[复制链接]
跳转到指定楼层
楼主
发表于 2015-10-14 15:08:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
求一个约瑟夫环的代码

沙发
发表于 2015-10-17 17:27:59 | 只看该作者
#include "stdio.h"
#include "stdlib.h"
#define S sizeof(struct node)
  
struct node
{
  
int num;
  
struct node *next;
};
  
typedef struct node NODE;
  
NODE *createlinklist(int n)
{
  
NODE *head,*p,*q;
  
int i=1;
  
head=p=(struct node*)malloc(sizeof(struct node));
  
p->num=i;
  
for(i=2;i<=n;i++)
  
{
  
   q=(struct node*)malloc(sizeof(struct node));
  
    if(q==0) return(0);
  
    p->next=q;
  
    p=q;
  
    p->num=i;
  
}
    p->next=head;
  
  /*使链表尾指向链表头 形成循环链表*/
  
  
   return head;
}
  
void printlinklist(NODE *p,int n)
{
  
int i;
  NODE *q = p;
  
if(NULL == q->next){
   printf("the list is NULL!");
   return;
  }
  
printf("所有玩家的信息列表:\
");
  
for(i=1;i<=n;i++)
  
{
  
if(NULL == q){
    printf("the list is NULL!");
    return;
   }
  
    printf("%d  ",p->num);
  
    p=p->next;
  
}
printf("\
");
}
  
void joseph(NODE *p,int n,int m)
{
  int i,j;
  NODE *q;
  for(i=1;i<n;i++)
  {
   for(j=1;j<=m-1;j++)
   {
    p=p->next;
   }
   q=p->next;
   p->next = q->next;
   printf("%d  ",q->num);
   free(q);
  }
  printf("\
最后剩余的是第%d号.\
",p->num);
  p->next=NULL;
}
  
    void main()
{
  
NODE *head;
  
int n,m;
  printf("请输入人数N:\
");
  scanf("%d",&n);
  printf("输入K:\
");
  scanf("%d",&m);
  
head=createlinklist(n);
  
printlinklist(head,n);
  printf("依次被选出的是:\
");
  
joseph(head,n,m);
}
板凳
发表于 2016-7-22 20:32:50 | 只看该作者
#include<iostream> using namespace std; int main() {  const int n=100;  int m=30;  int a[n];   for(int j=0;j<n;j++)   a[j]=j+1;  int k=1;  int i=-1;  while(1)  {   for(int j=0;j<m;)   {    i=(i+1)%n;       if(a[i]!=0)         j++;   }   if(k==n)    break;   a[i]=0;   k++;  }  cout<<a[i]<<endl;  return 0; }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表