• 约瑟夫


    /*问题描述:n个人(编号0~(n-1)),从0开始报数,报到m-1的退出,剩下的人继续从0开始报数。求胜利者的编号。*/
    
    
    #include <stdio.h>  
    int main(void)  
    {  
      int n, m, i, s=0;  
      printf ("N M = ");  
      scanf("%d%d", &n, &m);  
      for (i=2; i<=n; i++)  
      s=(s+m)%i;  
      printf ("The winner is %d\n", s);  
      return 0 ;  
    }  
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 struct stu
     4 {
     5     int num;
     6     struct stu *next;
     7 };    
     8 /*int shuzu(int n,int m)
     9 {
    10     int a[302];
    11     int i,t,p;
    12     for(i=0;i<=n;i++)//数组初始化为1
    13         a[i]=1;
    14     t=n;
    15     i=1;
    16     p=1;
    17     while(t>1)//当数组中还有超过一个未出圈就继续循环
    18     {
    19         if(a[i]==1)//判断是否出圈
    20         {
    21             if(p==m)//判断是否到达m个,是则初始化,否则计数加加
    22             {
    23                 a[i]=0;
    24                 p=1;
    25                 t--;
    26             }
    27             else
    28                 p++;
    29         }
    30         i++;
    31         if(i>n)  i=1;//判断是否超过数组长度,是则从头开始
    32     }
    33     for(i=1;i<=n;i++)//寻找最后一个未出圈的谁
    34         if(a[i]==1)
    35         printf("%d\n",i);
    36         return 0;
    37 }*/
    38 
    39 int main()
    40 {
    41     int i,n,m;
    42     struct stu *p,*q,*head;//链表专用    
    43     while(scanf("%d%d",&n,&m),n||m)
    44     {
    45     //    shuzu(n,m);//数组计数
    46 
    47 
    48         //链表计数
    49         head=(struct stu*)malloc(sizeof(struct stu));
    50        head->num=1;
    51        head->next=head;
    52        p=head;
    53        if(m==1)  printf("%d\n",n);
    54        else
    55        {
    56           for(i=2;i<=n;i++)//生成链表
    57           {
    58                q=(struct stu*)malloc(sizeof(struct stu));
    59                q->num =i;
    60                p->next =q;
    61                p=p->next ;
    62                p->next=head;
    63            } 
    64           //q=head;
    65           while(head!=head->next)//开始循环
    66           {
    67               for(i=2;i<m;i++)
    68                   head=head->next ;
    69                 head->next =head->next->next;
    70                 head=head->next;
    71           }
    72           printf("%d\n",head->num);
    73           free(head);
    74        }
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    熟悉常用的Linux操作
    Python基础综合练习
    简易c语言文法
    词法分析程序
    组合数据类型综合练习
    综合练习:词频统计
    词法分析程序2
    我对编译原理的理解
    【分享】博客美化(6)为你的博文自动添加目录
    python爬虫的基本思路
  • 原文地址:https://www.cnblogs.com/xiaofanke/p/3028204.html
Copyright © 2020-2023  润新知