约瑟夫环问题
2016-04-08 19:36
295 查看
约瑟夫环: n个数字排成一个圆圈,从数字0开始,每次从这个圆圈中删除第k个数字,求这个圆圈中最后剩下的数字。
我们可以使用标准库中的链表来模拟一个圆环,每次访问到链表的结尾时,重新从头开始访问,直到链表中只剩下最后一个元素,输出结果。
更简便的一种实现:
我们可以使用标准库中的链表来模拟一个圆环,每次访问到链表的结尾时,重新从头开始访问,直到链表中只剩下最后一个元素,输出结果。
int lastRemaining(unsigned int n,unsigned int k){ if (n < 1 || k < 1){ return -1; } list<int> numbers; for (int i = 0; i < n;++i) { numbers.push_back(i); } list<int> ::iterator current = numbers.begin(); while (numbers.size()>1) { for (int i = 1; i < k;++i) { ++current; if (current==numbers.end()) { current = numbers.begin(); } } list<int>::iterator i_next = ++current; if (i_next==numbers.end()) { i_next = numbers.begin(); } --current; numbers.erase(current); current = i_next; } return *current; }
更简便的一种实现:
int lastRemaining(unsigned int n,int k){ if(n<1||k<1){ return -1; } int result=0; for(int i=2;i<=n;++i){ result=(result+k)%i; } return result; }
相关文章推荐
- 深入浅出UML类图(五)
- 关于程序员的几个阶段
- 简化delegate写法
- linux下查看文件编码及修改编码
- 关于ios9.0之后不能打开https的解决办法
- 关于 chartjs插件的用法
- JZOJ 4294【NOIP2015模拟11.2】复制&粘贴2
- c语言走向c++的第一步,注释转换
- JSON详解
- 深入浅出UML类图(四)
- Activity中获取AsyncTask中onPostExecute的结果返回值
- 哈理工OJ 2035 Diablo(多次广度优先搜索+详解)
- 【算法总结--数组相关】双指针法的常见应用。
- java汉字中首字母排序
- MySQL性能优化的21个最佳实践
- C++算法从入门到放弃-无向图(1)
- ACdream 1115 Salmon And Cat (找规律&&打表)
- Java 基础面试 每日一点Java源文件(*.java)——>Java编译器——>字节码文件(*.class)——>类装载器——>字节码校检器—— >解释器——>操作系统(Windows、Linux
- Android 学习记录-获取天气API
- 基于Android的一个简易计算器的实现