• 约瑟夫问题(单向链表)


    # include "stdlib.h" 
    # include "stdio.h" 
    struct Node
    {
     int data;
     Node *next;
    };
    int main()
    {
     int n,k=1,m,i,s;
      Node *p,*q,*head;
      printf("约瑟夫问题——顺序表/n输入总人数n和退出编号m:/n"); // 输入总人数,退出编号 
      scanf("%d%d",&n,&m); 
      head=new Node;           //确定头结点
      p=head;
     for(i=1;i<=n-1;i++)                 //赋初值
     {
      p->data=i;
      p->next=new Node;   //为下一个新建内存
      p=p->next;
     }
      p->data=n;                 //最后一个单独处理
      p->next=head;                 //指向头,形成循环链表
      p=head;                 
     
     while(p->data!=(p->next)->data)            //p->data==(p->pNext)->data表示只剩下一个结点的
     {
      while(p->data !=k)         //寻找编号为k的结点
       p=p->next;
       s=1;
     if(m==1)
     {
      for(i=1;i<n;i++)
      {
       p=p->next ;
       }  
      printf("最后退出的是第%d位人/n",p->data);     
    break;
     }
    else
    {
    while(p!=p->next)           
     {
      for(i=1;i<m-1;i++)         
    p=p->next;             
    q=p->next;          
    p->next=q->next;
    p=p->next;
      delete q;
      s++; 
       }
    printf("最后退出的是第%d位人/n",p->data);      
    delete p;
    }
     }
    system("Pause");
    return 0; 
    }

  • 相关阅读:
    计算长度的方法
    自动装箱和拆箱
    基本数据包装类
    Date类
    文档参数解析
    权限修饰符
    IO流
    ArrayList集合类
    对象数组
    二维数组
  • 原文地址:https://www.cnblogs.com/ituff/p/2858553.html
Copyright © 2020-2023  润新知