zoukankan      html  css  js  c++  java
  • 约瑟夫问题(单向链表)

    # 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; 
    }

  • 相关阅读:
    VueBlog
    java 代理模式
    集合框架
    面试题
    java 多线程
    网络编程
    HTTP
    MAVEN
    Redis高级
    深入浅出--梯度下降法及其实现
  • 原文地址:https://www.cnblogs.com/ituff/p/2858553.html
Copyright © 2011-2022 走看看