- 浏览: 81989 次
- 性别:
- 来自: 江苏
文章分类
最新评论
-
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 2279问题描述 形如2p-1 的素数称为麦森数,这时P 一定也是个素 ... -
杰哥私房题──大数相除
2009-03-16 11:06 1822问题描述 求两个大的正整数相除的商 输入数据 第1 行是测试数 ... -
杰哥私房题──大数相乘
2009-03-13 10:44 1583问题描述 求两个不超过200 位的非负整数的积。 输入数据 有 ... -
杰哥私房题──大数相加
2009-03-11 15:17 1440问题描述 求两个不超过200 位的非负整数的和。 输入数据 有 ... -
杰哥私房题──排列
2009-03-10 17:25 1646问题: 大家知道,给出正整数n,则1 到n 这n 个数可以构成 ... -
杰哥私房题——显示器
2009-03-09 17:56 1162问题描述你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑 ... -
杰哥私房题──花生问题
2009-03-07 08:54 1767问题描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿 ... -
杰哥私房题──时区间时间的转换
2009-03-04 09:00 2697问题描述 直到19 世纪, ... -
杰哥私房题──玛雅历
2009-03-03 12:16 1769问题描述 上周末,M.A ... -
杰哥私房题──日历问题
2009-03-03 12:13 1280问题描述 在我们现在使用的日历中, 闰年被定义为能被4 整除的 ... -
杰哥私房题──细菌繁殖
2009-03-02 17:08 1535问题描述 一种细菌的繁殖速度是每天成倍增长。例如:第一天有10 ... -
杰哥私房题──最难的问题
2009-03-02 17:03 1318问题描述 Julius Caesar 生活在充满危险和阴谋的年 ... -
杰哥私房题──字串
2009-02-28 10:48 3575问题描述 有一些由英文字符组成的大小写敏感的字符串。请写一个程 ... -
杰哥私房题──487-3279
2009-02-26 22:36 1449问题描述 企业喜欢用容易被记住的电话号码。让电话号码容易被记住 ... -
杰哥私房题──相邻数字的基数不等比:skew数
2009-02-25 13:52 1215问题描述 在 skew binary 表示中, 第 k 位的值 ... -
杰哥私房题──相邻数字的基数等比:确定进制
2009-02-24 20:39 1499问题描述 6*9 = 42 对于十进制来说是错误的,但是对于 ... -
杰哥私房题──装箱子
2009-02-18 20:31 1027问题描述 一个工厂制造的产品形状都是长方体,它们的高度 ... -
杰哥私房题──填词
2009-02-16 19:39 1453问题描述 Alex 喜欢填词游戏。填词游戏是一个非 ... -
杰哥私房题──校门外的大树
2009-02-14 14:15 1176问题描述 某校大门外长度为 L 的马路上有一排树,每两 ... -
杰哥私房题──棋盘上的距离
2009-02-13 15:02 1191问题描述 国际象棋的棋盘是黑白相间的 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 ...
电赛历年真题查找与经典题目解析+编程知识+技术开发; 电赛历年真题查找与经典题目解析+编程知识+技术开发; 电赛历年真题查找与经典题目解析+编程知识+技术开发; 电赛历年真题查找与经典题目解析+编程知识+技术...
本人收集的几套百度笔试题。 doc格式,需要找工作的可以看看
美赛历年真题查找与经典题目解析+编程知识+技术开发; 美赛历年真题查找与经典题目解析+编程知识+技术开发; 美赛历年真题查找与经典题目解析+编程知识+技术开发; 美赛历年真题查找与经典题目解析+编程知识+技术...
ACM历年真题查找与经典题目解析+编程知识+技术开发; ACM历年真题查找与经典题目解析+编程知识+技术开发; ACM历年真题查找与经典题目解析+编程知识+技术开发; ACM历年真题查找与经典题目解析+编程知识+技术开发;...
蓝桥杯历年真题查找与经典题目解析+编程知识+技术开发; 蓝桥杯历年真题查找与经典题目解析+编程知识+技术开发; 蓝桥杯历年真题查找与经典题目解析+编程知识+技术开发; 蓝桥杯历年真题查找与经典题目解析+编程知识...
前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,...
Google钟情于考察应聘者对于复杂问题的理解和解决能力,因此,其笔试题往往以编程和逻辑思维为重,这要求应聘者不仅要有扎实的计算机科学基础知识,还要具备出色的分析和抽象思维能力。例如,笔试中可能会出现涉及...
【Ceph分布式存储架构搭建】 Ceph是一种先进的开源分布式存储解决方案,它被广泛应用于OpenStack和CloudStack等云计算框架中,提供对象存储、文件系统和块存储服务。Ceph的独特之处在于其统一存储架构,支持多种...
### Linux 环境下的开发项目指南 在 Linux 环境下进行开发项目不仅仅涉及编写代码,还需要掌握软件安装、环境配置、项目源码管理以及运维调试等多个方面。本指南将详细介绍如何在 Linux 系统中高效地完成开发工作。...