• 约瑟夫环


    约瑟夫环

    一、心得

    二、题目及分析

    约瑟夫环

    三、代码及结果

    1、

     1 #include <iostream>
     2 using namespace std;
     3 
     4 const int n=10,m=4;
     5 int a[n+1]; // 6 
     7 //初始化环 
     8 void initCercle(int a[]){
     9     for(int i=1;i<n;i++){
    10         a[i]=i+1;
    11     }
    12     a[n]=1;
    13 }
    14 //打印环 
    15 void printCercle(int a[]){
    16     for(int i=1;i<=n;i++){
    17         cout<<a[i]<<" ";
    18     }
    19     cout<<endl;
    20 }
    21 
    22 //找输出节点的前一个节点,然后a[]就好 
    23 void work(){
    24     int k=n;
    25     for(int i=1;i<=n;i++){
    26         //这里只做了m-1,这里是三次,因为被删的节点被跳过了 
    27         for(int j=1;j<m;j++){
    28             k=a[k];    
    29         }
    30         cout<<a[k]<<" ";
    31         a[k]=a[a[k]];
    32         //cout<<"k:"<<k<<"a[k]:"<<a[k]<<endl;
    33     } 
    34 }
    35 
    36 int main(){
    37     
    38     initCercle(a);
    39     printCercle(a);
    40     work();
    41     
    42     
    43     return 0;
    44 } 

    2、约瑟夫环(pre)

     1 #include <iostream>
     2 using namespace std;
     3 
     4 const int n=10,m=4;
     5 int a[n+1]; // 6 
     7 //初始化环 
     8 void initCercle(int a[]){
     9     for(int i=1;i<n;i++){
    10         a[i]=i+1;
    11     }
    12     a[n]=1;
    13 }
    14 //打印环 
    15 void printCercle(int a[]){
    16     for(int i=1;i<=n;i++){
    17         cout<<a[i]<<" ";
    18     }
    19     cout<<endl;
    20 }
    21 
    22 //找输出节点的前一个节点,然后a[]就好 
    23 void work(){
    24     int k=n;
    25     int pre; 
    26     for(int i=1;i<=n;i++){
    27         //这里做了m,这里是4次 
    28         for(int j=1;j<=m;j++){
    29             pre=k;
    30             k=a[k];    
    31         }
    32         cout<<a[pre]<<" ";
    33         a[pre]=a[a[pre]];
    34         //cout<<"k:"<<pre<<"a[k]:"<<a[pre]<<endl;
    35     } 
    36 }
    37 
    38 int main(){
    39     
    40     initCercle(a);
    41     printCercle(a);
    42     work();
    43     
    44     
    45     return 0;
    46 } 

    3、约瑟夫环(链)

     1 //约瑟夫环(链) 
     2 #include <iostream>
     3 using namespace std;
     4 
     5 const int n=10,m=4;
     6 
     7 
     8 struct node{
     9     int data;
    10     node *next;
    11 }; 
    12 node *head=new node;
    13 
    14 void initList(){
    15     head->data=0;
    16     head->next=NULL;
    17     for(int i=10;i>=1;i--){
    18         node *p=new node;
    19         p->data=i;
    20         p->next=head->next;
    21         head->next=p; 
    22     }
    23 }
    24 
    25 void printList(){
    26     node *p=head->next;
    27     while(p){
    28         cout<<p->data<<" ";
    29         p=p->next;
    30     }
    31     cout<<endl;
    32 }
    33 
    34 void work(){
    35     node *p=head;
    36     node *pre;
    37     for(int i=1;i<=n;i++){
    38         for(int j=1;j<=m;j++){
    39             pre=p;
    40             p=p->next;
    41             if(!p) p=head->next;
    42         } 
    43         cout<<p->data<<" ";
    44         pre->next=p->next;
    45     }
    46 }
    47 
    48 
    49 int main(){
    50     initList();
    51     printList();
    52     work();
    53     return 0;
    54 } 

  • 相关阅读:
    Centos5.x 更换yum源
    前端常用的数据处理(基础版)
    动态库和静态库的区别是什么(转)
    java8.0_181b13 异常信息
    sql server 跨数据库调用存储过程
    基于51单片机的简易“视频播放器”
    https还安全吗 https抓包原理 https抓包工具
    hash 碰撞的2种解决办法
    商品秒杀提高QPS解决方案
    指针压缩原理和为什么指针压缩只能压缩3位
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7220313.html
Copyright © 2020-2023  润新知