随笔分类 - 算法
摘要:大意就是给你n个人,编号为1-n。从第一个人开始报数,报到m时候,第m个人出列。然后下个人从1开始报数,逢m出列。问最后出列的人的编号。刚开始用的是循环链表,纯模拟做法。发现当n很大时,铁定TLE。所以上网搜了下,发现有数学方法解决这个问题。思路就是递推,发现子问题,然后由子问题的解推总问题的解。公式就是:f(1) = 0;f(i) = (f(i - 1) + m) % i; (i > 1)公式的含义我解释一下:f(1)代表就一个人玩游戏,所以不需要踢人,第一个人就是获胜者,但为什么是0不是1本身呢?接着看。。。。。f(i)代表剩i个人时要踢的人,f(i - 1)代表剩i - 1时踢掉的
阅读全文
摘要:最近在C语言之家看到好多道约瑟夫问题的程序,有C的,有C++的.其中的实现方法都是用链表,基本上没有看到用数组来做的.我以前用pascal写过用数组和链表分别做这一个问题,现在就将数组这一方法的实现过程用C语言改写,发上来供参考,如有错漏,请指正./* ==================================================== *//* 程序名称: arrayList.c *//* 程序目的: 用数组实现约瑟夫问题 *//* 程序作者: aimt ( computer 021 ) *//* =====================================
阅读全文
摘要:各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的:1、 本游戏是一个二人游戏;2、 有一堆石子一共有n个;3、 两人轮流进行;4、 每走一步可以取走1…m个石子;5、 最先取光石子的一方为胜;如果游戏的双方使用的都是最优策略,请输出哪个人能赢。------------------------------- 明显的巴什博弈(简单博弈)题:一种很古老的游戏,双方轮次从某一集合抽取部分,直到最后一人抽空。类似的模型有报数等。假如我是A,对方是B,一共有n石子,一次最多拿m个,我后拿。如果我想取胜,那么在这个轮流拿石子的过程中我必须看B每次拿多少以计算我每次应该拿多少,这样预期结果是我赢;当
阅读全文
摘要:谷歌是不少IT人都想去的企业,那么在进入公司前,少不了面试笔试的测试。那么这里我们就总结了如下谷歌笔试题,并提供了一些参考答案。希望对您有用。谷歌笔试题:判断一个自然数是否是某个数的平方。当然不能使用开方运算。假设待判断的数字是 N。方法1:遍历从1到N的数字,求取平方并和N进行比较。如果平方小于N,则继续遍历;如果等于N,则成功退出;如果大于N,则失败退出。复杂度为O(n^0.5)。方法2:使用二分查找法,对1到N之间的数字进行判断。复杂度为O(log n)。方法3:由于(n+1)^2=n^2 + 2n + 1,= ...= 1 + (2*1 + 1) + (2*2 + 1) + ... +
阅读全文

浙公网安备 33010602011771号