约瑟夫问题--list模拟循环链表
来源:互联网 发布:nodejs和java的区别 编辑:程序博客网 时间:2024/06/01 09:30
约瑟夫问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
输入
输入n和m值。
输出
输出胜利者的编号。
示例输入
5 3
示例输出
4
首先说一下写这个之前我是准备徒手艹链表的,可惜意志力实在不咋滴,再加上手头上没课本,之前我有看过C语言版的链表实现,但没动手敲过,都是偷懒用list水过,list是双向链表,但约瑟夫这个问题吧,明显是用循环链表来完成的,问题来了,本渣不会艹链表啊,木办法只能用list来胡搞了
#include <stdio.h>#include <iostream>#include <algorithm>#include <list>using namespace std;int main(){ int m,n,i; cin>>n>>m; list <int> node; list <int>::iterator j; for(i=1;i<=n;i++)node.push_back(i); //编号 j=node.begin(); while(node.size()>1) //当链表中只剩一个元素时结束 { for(i=1;i<m;i++) //第k遍遍历{if(j!=node.end())j++;else //重点来了{j=node.begin();j++; //一开始忘记写这个了 其实当j=node.end()时就意味着j已经指向node.begin()了,只是因为这不是循环链表,我们需要手动把它改过来}}if(j!=node.end())node.erase(j++);else //同上{j=node.begin();node.erase(j++);} } cout<<node.front()<<endl; return 0;}
3 0
- 约瑟夫问题--list模拟循环链表
- 约瑟夫环问题(双向循环链表模拟)
- 约瑟夫问题-循环链表
- 循环链表:约瑟夫问题
- 循环链表-约瑟夫问题
- 循环链表--约瑟夫问题
- 用循环链表求解约瑟夫问题
- 循环链表与约瑟夫问题
- 单向循环链表实现约瑟夫问题
- 用循环链表实现约瑟夫问题
- 基于循环链表的约瑟夫问题
- 约瑟夫环问题(循环链表)
- 约瑟夫问题简单实现-循环链表
- C++循环链表实现约瑟夫问题
- 约瑟夫问题(循环链表)
- 单向循环链表—约瑟夫问题
- 约瑟夫问题--循环链表实现
- 循环链表 约瑟夫环问题实现
- php中GET POST REQUEST 的区别
- php自学笔记之windows开发环境的搭建
- Linux信号前奏之文件锁
- C# 线程间不能调用剪切板的问题
- nodejs mongoDB 视频教程
- 约瑟夫问题--list模拟循环链表
- Disruptor入门
- matlab学习笔记 图形句柄属性总结
- ARM linux解析之压缩内核zImage的启动过程 一
- csdn.net 的搜索功能
- 读书的建议
- 并查集(含关系并查集)
- jdk和两个jre
- ARM linux解析之压缩内核zImage的启动过程 二