zoukankan      html  css  js  c++  java
  • P1996||T1282 约瑟夫问题 洛谷||codevs

    https://www.luogu.org/problem/show?pid=1996||http://codevs.cn/problem/1282/

    题目背景

    约瑟夫是一个无聊的人!!!

    题目描述

    n个人(n<=30000)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

    输入输出格式

    输入格式:

    n m

    输出格式:

    出圈的编号

    输入输出样例

    输入样例#1:
    10 3
    输出样例#1:
    3 6 9 2 7 1 8 5 10 4

    说明

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstdio>
     4 #define N 30005
     5 
     6 using namespace std;
     7 
     8 int n,m,sum,k,now;
     9 int que[N];
    10 bool vis[N];
    11 
    12 int main()
    13 {
    14     cin>>n>>m;
    15     while(sum<n)
    16     {
    17         k++;
    18         now++;
    19         if(now==n+1) now=1;
    20         if(vis[now])
    21             while(vis[now])
    22             {
    23                 now++;
    24                 if(now==n+1)
    25                     now=1; 
    26             }
    27         if(k==m)
    28         {
    29             k=0;
    30             printf("%d ",now);
    31             vis[now]=1;
    32             sum++;
    33         }
    34     }
    35     return 0;
    36 }
    View Code
     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstdio>
     4 #define N 30005
     5 
     6 using namespace std;
     7 
     8 int n,m,k,sum,now;
     9 int que[N];
    10 
    11 int main()
    12 {
    13     cin>>n>>m;
    14     for(int i=1;i<n;i++)
    15         que[i]=i+1;
    16     que[n]=1;
    17     k=1; now=n;
    18     while(sum<n)
    19     {
    20         while(k<m)
    21         {
    22             k++;
    23             now=que[now];
    24         }
    25         printf("%d ",que[now]);
    26         sum++;
    27         que[now]=que[que[now]];
    28         k=1;
    29     }
    30     return 0;
    31 }
    View Code 2
     1 #include <cstdio>
     2 
     3 using namespace std;
     4 
     5 int n,m,q[30005],now=1;
     6 
     7 int main()
     8 {
     9     scanf("%d%d",&n,&m);
    10     for(int i=1;i<=n;i++)    q[i]=i;
    11     while(n)
    12     {
    13         now=(now+m-1)%n;
    14         if(now==0)    now=n;
    15         printf("%d ",q[now]);
    16         for(int i=now;i<n;i++)    q[i]=q[i+1];
    17         n--;
    18     }
    19     return 0;
    20 }
    View Code 3 the quickest
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    吉他谱----see you again
    web----tcp三次握手
    python shell 执行
    python jieba
    NLP gensim 相似度计算
    linux shell expect 自动交互脚本
    docker 安装镜像
    数据库 MySQL 数据导入导出
    爬虫 puppeteer
    Linux ssh相关
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6591597.html
Copyright © 2011-2022 走看看