题意:给出N个数,然后给出K,1到n圈的n个人开始,数K个数之后淘汰一个人,直到只有一个人幸存下来。

暴力法-WA
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
struct node{int x;node*next;node(int x):x(x),next(NULL){}
};
int n,k;
int main(){while(scanf("%d %d",&n,&k)!=EOF){node*first=NULL;node*last=new node(1);first=last;for(int i=2;i<=n;i++){last->next=new node(i);last=last->next;}last->next=first;for(int i=1;i<=n;i++){for(int j=1;j<k;j++){last=first;first=first->next;}if(i==n){cout<<first->x<<endl;}last->next=first->next;first=first->next;}}return 0;
}
方法二:超时
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
ll n,k;
int main(){while(scanf("%lld %lld",&n,&k)!=EOF){ll ans=0;for(int i=1;i<=n;i++){ans=(ans+k)%i;}cout<<ans+1<<endl;}return 0;
}

当N很大,k较小的时候,就算法对i取模(ans=(ans+k)%i)也是没有太大的意义的,在方法二的基础上ans加多个K之后再对i取模,

方法三:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
ll n,k;
int main(){while(scanf("%lld %lld",&n,&k)!=EOF){ll ans=0,pos,i=1; while(i<n){if(k==1){//注意这里如果除数为0的情况pos=i-ans;}else{pos=(i-ans)/(k-1)+((i-ans)%(k-1)!=0);//如果(i-ans)%(k-1)不为零,那么就意味着还需要加一个步长才对}if(pos+i>n){//如果大于npos=n-i;}ans+=pos*k;//ans加上K个posi+=pos;ans%=i;}cout<<ans+1<<endl;}return 0;
}

HDU3089(约瑟夫环问题)相关推荐

  1. python中约瑟夫环程序_Python实现约瑟夫环问题的方法

    本文实例讲述了Python实现约瑟夫环问题的方法.分享给大家供大家参考,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的 ...

  2. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

  3. python约瑟夫环问题给十个学生编号报到3者出列_趣味算法--约瑟夫环问题(示例代码)...

    问题描述 已知n个人(以编号1,2,3,...,n分别表示)围坐在一张圆桌上.指定编号为k的人开始从1报数,数到m的那个人出列:出列那个人的下一位又从1开始报数,数到m的那个人出列:以此规则重复下去, ...

  4. 一文读懂约瑟夫环算法

    2020-05-25 20:13:40 作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的 ...

  5. 面试题小记:1、统计字符串出现的次数,2、约瑟夫环问题

    今天面到了一个比较有意思的笔试题,先记录一下: 1.字符串类似'aaabbccddd',写个方法得出'3a2b2c3d',即统计字符串出现的个数 $arr = str_split('aaabbccdd ...

  6. java实现简单的约瑟夫环问题(二)

    Josephus(约瑟夫)问题的数学方法 前面的内容都是直接来来自于百度百科,后面才是我对这段话的理解 无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间 ...

  7. 约瑟夫环双向链表c语言实,双向链表与约瑟夫环代码

    双向链表 //注意:该文件操作的链表为带头结点双向链表,头结点数据为-1 #include #include #include #define OK 1 #define ERROR 0 typedef ...

  8. python解决约瑟夫问题_Python实现约瑟夫环问题的方法

    本文实例讲述了Python实现约瑟夫环问题的方法.分享给大家供大家参考,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的 ...

  9. 约瑟夫环(约瑟夫问题)求最后出列的人数

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出 ...

  10. PHP解决约瑟夫环问题

    PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...

最新文章

  1. 过主动防御自启动代码delphi
  2. C# 数据库dataGridView刷新数据和主外键判断
  3. Web黑客工具箱之LiveHttpHeaders
  4. TechOnTheNet的Oracle专题
  5. java vc vb 项目结构
  6. 如何使用 Apache 设置反向代理
  7. 用docker跑机器学习环境
  8. 关于微星主板官网下载网卡驱动后,网络适配器消失的问题
  9. 【转】ASP六大对象介绍
  10. 爆炸的符卡洋洋洒洒(dp)
  11. 最美十大爱情经典句子
  12. 赶紧自查,你的身份证很有可能被别人绑定了!
  13. vb microsoft html object library,HTML对象库简介(Microsoft HTML Object Library - mshtml.tlb)...
  14. 口腔健康核心信息及知识要点
  15. 【因式分解】x^n+1,当 n 为偶数,系数为实数域的因式分解
  16. TCP/IP协议的send和recieve
  17. 企业办公入门之选 用ThinkCentre E95更划算!
  18. 远程桌面连接凭据不工作怎么办?
  19. 魔兽地图编辑器的平滑浅水区域
  20. 基于SSH的网络预约挂号系统的设计与实现

热门文章

  1. 工业镜头与工业相机的接口
  2. 传统CV和深度学习方法的比较
  3. 你应该知道的高性能无锁队列Disruptor
  4. Android Studio第三十四期 - git企业级应用命令
  5. InnoDB: Failing assertion: trx-isolation_level == TRX_ISO_READ_UNCOMMITTED
  6. js实现的时间轴效果
  7. 开源 免费 java CMS - FreeCMS1.5 标签 guestbookPage
  8. SQL server数据库日志满了怎么处理?
  9. redis中文乱码问题
  10. java args例子_Spring AOP中使用args表达式的方法示例