- 浏览: 81726 次
- 性别:
- 来自: 江苏
文章分类
最新评论
-
kissyssong:
kissyssong 写道先顶再看!除法是Division吧, ...
杰哥私房题──大数相除 -
kissyssong:
先顶再看!除法是Division吧,怎么搞了个减法啊
杰哥私房题──大数相除 -
kissyssong:
这个比我自己写的好理解啊,顶
杰哥私房题──大数相乘 -
sesame:
兄弟真的很会折腾,不错! 刚好也用到windows连接ubun ...
Ubuntu与Windows 之间的远程桌面连接 -
soft901:
用递归写了个
<pre name="code ...
杰哥私房题──约瑟夫问题
问题描述
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号
开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1 开始报数。就这样,
直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编
号。
输入数据
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m, n < 300)。最后一行
是:
0 0
输出要求
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
输入样例:
6 2
12 4
8 3
0 0
输出样例:
5
1
7
#include <stdio.h> void initialize(char* arg, int n){ int i; for(i = 0; i < n; i ++){ arg[i] = i + 1; } } int finalMonkey(char* arg, int n){ int i; for(i = 0; i < n; i++){ if(arg[i]) return arg[i]; } } int main(){ int n, m; while(scanf("%d %d", &n, &m) && n != 0 && m != 0){ char monkeyLoop[300] = {0}; initialize(monkeyLoop, n); int i,j = 0, k = 0, ptr = 0; while(1){ while(j < n){ if(monkeyLoop[j]) ptr ++; if(ptr == m){ monkeyLoop[j] = 0; ptr = 0; k ++; } j++; } if (k == n -1){ break; } j %= n; } int result = finalMonkey(monkeyLoop, n); printf("%d\n", result); } return 0; }
评论
14 楼
soft901
2009-08-15
用递归写了个
private void josephus(int n, int m) { List list = new ArrayList(); for (int i = 1; i <= n; i++) { list.add(i); } f(m, m - 1, list); } private void f(int m, int increase, List list) { if (list == null || list.size() == 0) return; if (list.size() == 1) { System.out.println(list.get(0)); return; } m = checkSize(m, list.size()); list.remove(m - 1); m = m + increase; f(m, increase, list); } private int checkSize(int m, int size) { if (m > size) { m = m - size; } if (m > size) { return checkSize(m, size); } return m; }
13 楼
zhang_jie439
2009-08-14
学学小学奥数,有这个题。
12 楼
苏东坡放牛
2009-08-14
哈哈,这个算法我研究过,很多人讨论过这个无比经典的算法,真的是纯数学的脑子才想的出来的……
这里不知允不允许贴链接:
http://topic.csdn.net/u/20070916/15/11a62d59-3d7a-4aa6-81be-b1bef25ac404.html
这里提供了两种数学思路,第一种太复杂了,实在是不敢看下去…………
第二种我的理解是这样的,基于这个链接里的说法,不过这个说法我也看得一知半解……
f(i)表示从i个猴子中数到第m个退出的最后剩下的猴子编号,于是本问题要求的也就是f(n)。如果可以的话我们可以画一个n个猴子围成圈的图,方便理解。
于是:
假设从某个位置开始,我们标注1,然后不停的找,找到第一个m的位置,然后将它踢出去,从第m+1个位置接着找。一直到最后找到了f(n),也就是问题的解。
注意了!这个意思也就是说,我们从n个猴子中从第1个开始找起和n-1个猴子中从第m+1个(相对于n个猴子中的m)找起的结果是一样的!这样我们就有了一个递归的思路……
那么这个问题现在我们这样思考,从n-1个猴子中从第m+1找起和第1个位置(上面定义的那个第1个位置)找起有什么关系呢?
我们不妨将m+1先简单想成2,n-1个猴子,从第1个位置找起和从第二个位置找起结果f(n-1)有什么不同???
一定是相差1!没有证明,但是想想那-1个猴子围成的圈就好像一个齿轮一样,它的找法都是一样的,所以就是一个错一个嘛,从第1个位置找起是f(n-1),从第2个位置找起结果一定是f(n-1)+1嘛!!为了确保正确,应该是(f(n-1)+1)%n,也就是加个取模操作,注意此时长度是n-1,所以取模用n……
所以从第m+1个位置找起,一定就是(f(n-1)+m)%n嘛!
也就是说,n-1个猴子,从第m+1个找起的结果是(f(n-1)+m)%n。而上面说了,它又是和从n个猴子中从第1个找起是等价的,也就是f(n).
于是这个结论就出来了:f(n)=(f(n-1)+m)%n
同时初始条件f(1)=1.这样就可以用递归很简洁的写出来了………………
哎呀呀,用文字写确实麻烦多了,可是我觉得思路很明白,那些数学公式看着太头疼了,我觉得这样写出来反而明白。
看公式看不懂的不妨看看我的啊……哈哈,欢迎指教
这里不知允不允许贴链接:
http://topic.csdn.net/u/20070916/15/11a62d59-3d7a-4aa6-81be-b1bef25ac404.html
这里提供了两种数学思路,第一种太复杂了,实在是不敢看下去…………
第二种我的理解是这样的,基于这个链接里的说法,不过这个说法我也看得一知半解……
f(i)表示从i个猴子中数到第m个退出的最后剩下的猴子编号,于是本问题要求的也就是f(n)。如果可以的话我们可以画一个n个猴子围成圈的图,方便理解。
于是:
假设从某个位置开始,我们标注1,然后不停的找,找到第一个m的位置,然后将它踢出去,从第m+1个位置接着找。一直到最后找到了f(n),也就是问题的解。
注意了!这个意思也就是说,我们从n个猴子中从第1个开始找起和n-1个猴子中从第m+1个(相对于n个猴子中的m)找起的结果是一样的!这样我们就有了一个递归的思路……
那么这个问题现在我们这样思考,从n-1个猴子中从第m+1找起和第1个位置(上面定义的那个第1个位置)找起有什么关系呢?
我们不妨将m+1先简单想成2,n-1个猴子,从第1个位置找起和从第二个位置找起结果f(n-1)有什么不同???
一定是相差1!没有证明,但是想想那-1个猴子围成的圈就好像一个齿轮一样,它的找法都是一样的,所以就是一个错一个嘛,从第1个位置找起是f(n-1),从第2个位置找起结果一定是f(n-1)+1嘛!!为了确保正确,应该是(f(n-1)+1)%n,也就是加个取模操作,注意此时长度是n-1,所以取模用n……
所以从第m+1个位置找起,一定就是(f(n-1)+m)%n嘛!
也就是说,n-1个猴子,从第m+1个找起的结果是(f(n-1)+m)%n。而上面说了,它又是和从n个猴子中从第1个找起是等价的,也就是f(n).
于是这个结论就出来了:f(n)=(f(n-1)+m)%n
同时初始条件f(1)=1.这样就可以用递归很简洁的写出来了………………
哎呀呀,用文字写确实麻烦多了,可是我觉得思路很明白,那些数学公式看着太头疼了,我觉得这样写出来反而明白。
看公式看不懂的不妨看看我的啊……哈哈,欢迎指教
11 楼
rappizit
2009-03-21
netalpha 写道
jiyanliang 写道
pe1011 写道
来个牛点的:
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
我关心的这个到底是啥子算法
我也很关心 应该是某个大牛想出来的 某个经典算法。
http://hi.baidu.com/wuxyy/blog/item/464471f03802fcafa40f523c.html
这里有解答
10 楼
netalpha
2009-03-17
liyingeye 写道
写了个JS的版本,随便看看
function findMonkeyKing(n,m)
{
var a = new Array();
for(i=0;i<n;i++)
a.push(i+1);
while(a.length>1)
{
for(i=1;i<m;i++)
a.push(a.shift());
a.shift();
}
return a.shift();
}
alert(findMonkeyKing(6,2)+"\n"+findMonkeyKing(12,4)+"\n"+findMonkeyKing(8,3));
function findMonkeyKing(n,m)
{
var a = new Array();
for(i=0;i<n;i++)
a.push(i+1);
while(a.length>1)
{
for(i=1;i<m;i++)
a.push(a.shift());
a.shift();
}
return a.shift();
}
alert(findMonkeyKing(6,2)+"\n"+findMonkeyKing(12,4)+"\n"+findMonkeyKing(8,3));
大侠果然牛,偶最近也在学习js和php
9 楼
liyingeye
2009-03-17
写了个JS的版本,随便看看
function findMonkeyKing(n,m)
{
var a = new Array();
for(i=0;i<n;i++)
a.push(i+1);
while(a.length>1)
{
for(i=1;i<m;i++)
a.push(a.shift());
a.shift();
}
return a.shift();
}
alert(findMonkeyKing(6,2)+"\n"+findMonkeyKing(12,4)+"\n"+findMonkeyKing(8,3));
function findMonkeyKing(n,m)
{
var a = new Array();
for(i=0;i<n;i++)
a.push(i+1);
while(a.length>1)
{
for(i=1;i<m;i++)
a.push(a.shift());
a.shift();
}
return a.shift();
}
alert(findMonkeyKing(6,2)+"\n"+findMonkeyKing(12,4)+"\n"+findMonkeyKing(8,3));
8 楼
netalpha
2009-03-06
jiyanliang 写道
pe1011 写道
来个牛点的:
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
我关心的这个到底是啥子算法
我也很关心 应该是某个大牛想出来的 某个经典算法。
7 楼
jiyanliang
2009-03-06
pe1011 写道
来个牛点的:
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
我关心的这个到底是啥子算法
6 楼
netalpha
2009-03-06
leeldy 写道
做算法题目不要被java的强大功能限制住了。。。
这句话深得我心,我就是因为这个才不用java写算法题,而选择了c,其实我最拿手的也是java,最近试着用C写程序,深深的感觉到了这一点。
5 楼
leeldy
2009-03-06
做算法题目不要被java的强大功能限制住了。。。
4 楼
netalpha
2009-03-06
pe1011 写道
来个牛点的:
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
望ls解答这个是个什么金典算法嘛?确实是对的,受教了。
3 楼
pe1011
2009-03-05
来个牛点的:
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
int findMonkey(int n, int m)
{
int r = 0;
for (int i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
2 楼
netalpha
2009-03-05
ilovemmmm 写道
我写了个java代码
import java.util.*; public class Haha { public static void main(String[] args) { final int N = 10; final int M = 5; List<Integer> num = new ArrayList<Integer>(); // List<Integer> num2 = new ArrayList<Integer>(); for (int i = 1; i <= N; i++) { num.add(i); } Iterator<Integer> it = num.iterator(); int ii = 0; for (int n = 1;; n++) { if (num.size() == 1) { System.out.println(num.get(0)); // num2.add(num.get(0)); break; } for (int i = 1; i <= M; i++) { if (it.hasNext()) { ii = it.next(); } else { it = num.iterator(); ii = it.next(); } } System.out.print(ii + "\t"); // num2.add(ii); it.remove(); } // System.out.println(num2); } }
恩 你这个是用list来写的,以后我也会推出一系列关于链表等的处理程序,希望大家关注
1 楼
ilovemmmm
2009-03-05
我写了个java代码
import java.util.*; public class Haha { public static void main(String[] args) { final int N = 10; final int M = 5; List<Integer> num = new ArrayList<Integer>(); // List<Integer> num2 = new ArrayList<Integer>(); for (int i = 1; i <= N; i++) { num.add(i); } Iterator<Integer> it = num.iterator(); int ii = 0; for (int n = 1;; n++) { if (num.size() == 1) { System.out.println(num.get(0)); // num2.add(num.get(0)); break; } for (int i = 1; i <= M; i++) { if (it.hasNext()) { ii = it.next(); } else { it = num.iterator(); ii = it.next(); } } System.out.print(ii + "\t"); // num2.add(ii); it.remove(); } // System.out.println(num2); } }
发表评论
-
杰哥私房题──麦森数
2009-03-17 18:47 2268问题描述 形如2p-1 的素数称为麦森数,这时P 一定也是个素 ... -
杰哥私房题──大数相除
2009-03-16 11:06 1815问题描述 求两个大的正整数相除的商 输入数据 第1 行是测试数 ... -
杰哥私房题──大数相乘
2009-03-13 10:44 1576问题描述 求两个不超过200 位的非负整数的积。 输入数据 有 ... -
杰哥私房题──大数相加
2009-03-11 15:17 1433问题描述 求两个不超过200 位的非负整数的和。 输入数据 有 ... -
杰哥私房题──排列
2009-03-10 17:25 1640问题: 大家知道,给出正整数n,则1 到n 这n 个数可以构成 ... -
杰哥私房题——显示器
2009-03-09 17:56 1155问题描述你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑 ... -
杰哥私房题──花生问题
2009-03-07 08:54 1757问题描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿 ... -
杰哥私房题──时区间时间的转换
2009-03-04 09:00 2692问题描述 直到19 世纪, ... -
杰哥私房题──玛雅历
2009-03-03 12:16 1764问题描述 上周末,M.A ... -
杰哥私房题──日历问题
2009-03-03 12:13 1271问题描述 在我们现在使用的日历中, 闰年被定义为能被4 整除的 ... -
杰哥私房题──细菌繁殖
2009-03-02 17:08 1522问题描述 一种细菌的繁殖速度是每天成倍增长。例如:第一天有10 ... -
杰哥私房题──最难的问题
2009-03-02 17:03 1302问题描述 Julius Caesar 生活在充满危险和阴谋的年 ... -
杰哥私房题──字串
2009-02-28 10:48 3564问题描述 有一些由英文字符组成的大小写敏感的字符串。请写一个程 ... -
杰哥私房题──487-3279
2009-02-26 22:36 1443问题描述 企业喜欢用容易被记住的电话号码。让电话号码容易被记住 ... -
杰哥私房题──相邻数字的基数不等比:skew数
2009-02-25 13:52 1209问题描述 在 skew binary 表示中, 第 k 位的值 ... -
杰哥私房题──相邻数字的基数等比:确定进制
2009-02-24 20:39 1487问题描述 6*9 = 42 对于十进制来说是错误的,但是对于 ... -
杰哥私房题──装箱子
2009-02-18 20:31 1022问题描述 一个工厂制造的产品形状都是长方体,它们的高度 ... -
杰哥私房题──填词
2009-02-16 19:39 1446问题描述 Alex 喜欢填词游戏。填词游戏是一个非 ... -
杰哥私房题──校门外的大树
2009-02-14 14:15 1172问题描述 某校大门外长度为 L 的马路上有一排树,每两 ... -
杰哥私房题──棋盘上的距离
2009-02-13 15:02 1185问题描述 国际象棋的棋盘是黑白相间的 8 * 8 ...
相关推荐
需要杰哥讲解的毕设js代码
但根据文件名,我们可以推测“杰哥”可能是资料的作者或提供者,而“两套卷”可能指的是两套数学练习题或模拟试卷,分别针对不同的数学领域。 【标签】虽然为空,但如果我们为这个文件添加标签,可能包括“数学”、...
C++自制小游戏《杰哥和阿伟》源码(cpp) C++小游戏,由哔哩哔哩的梗制作而成,切勿当真哦~ 游戏内行为请勿模仿! 原创小游戏,请勿转载或整改~ 记得关注@Ender_momo,短时间内将发布制作过程
用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现...
前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...
计算机组成原理期末题,计算机组成原理期末常见考试题大全 计算机组成原理期末题,计算机组成原理期末常见考试题大全 计算机组成原理期末题,计算机组成原理期末常见考试题大全 计算机组成原理期末题,计算机组成...
有跟我一样看不懂代码,只能盲抄来理解的吗,杰哥看到了莫生气我自己现在真写不了好了,今天的案例与while语句有关
笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题...
全国大学生数学建模大赛真题:2020年全国大学生数学建模竞赛 B 题 - “地下水污染源识别”; 全国大学生数学建模大赛真题:2020年全国大学生数学建模竞赛 B 题 - “地下水污染源识别”; 全国大学生数学建模大赛真题...
计算机类专业部分课后习题与详细解答分析.docx 计算机类专业部分课后习题与详细解答分析.docx 计算机类专业部分课后习题与详细解答分析.docx 计算机类专业部分课后习题与详细解答分析.docx 计算机类专业部分课后习题...
10道经典算法习题与详细解析.docx 10道经典算法习题与详细解析.docx 10道经典算法习题与详细解析.docx 10道经典算法习题与详细解析.docx 10道经典算法习题与详细解析.docx 10道经典算法习题与详细解析.docx ...
这份“百度google笔试题汇总”压缩包文件提供了丰富的资源,帮助那些准备实习或全职工作的应聘者提升自己的技术水平和解决问题的能力。 首先,我们来看看“Google笔试题.doc”和“Google笔试题 (1).doc”。这些文档...
电赛历年真题查找与经典题目解析+编程知识+技术开发; 电赛历年真题查找与经典题目解析+编程知识+技术开发; 电赛历年真题查找与经典题目解析+编程知识+技术开发; 电赛历年真题查找与经典题目解析+编程知识+技术...
本人收集的几套百度笔试题。 doc格式,需要找工作的可以看看
美赛历年真题查找与经典题目解析+编程知识+技术开发; 美赛历年真题查找与经典题目解析+编程知识+技术开发; 美赛历年真题查找与经典题目解析+编程知识+技术开发; 美赛历年真题查找与经典题目解析+编程知识+技术...
ACM历年真题查找与经典题目解析+编程知识+技术开发; ACM历年真题查找与经典题目解析+编程知识+技术开发; ACM历年真题查找与经典题目解析+编程知识+技术开发; ACM历年真题查找与经典题目解析+编程知识+技术开发;...
蓝桥杯历年真题查找与经典题目解析+编程知识+技术开发; 蓝桥杯历年真题查找与经典题目解析+编程知识+技术开发; 蓝桥杯历年真题查找与经典题目解析+编程知识+技术开发; 蓝桥杯历年真题查找与经典题目解析+编程知识...
前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,...
【Ceph分布式存储架构搭建】 Ceph是一种先进的开源分布式存储解决方案,它被广泛应用于OpenStack和CloudStack等云计算框架中,提供对象存储、文件系统和块存储服务。Ceph的独特之处在于其统一存储架构,支持多种...
### Linux 环境下的开发项目指南 在 Linux 环境下进行开发项目不仅仅涉及编写代码,还需要掌握软件安装、环境配置、项目源码管理以及运维调试等多个方面。本指南将详细介绍如何在 Linux 系统中高效地完成开发工作。...