微软100题第18题(求出在这个圆圈中剩下的最后一个数字)
2017-01-18 15:41
363 查看
1scala版本
package ms /** * 第18题(数组): 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 */ class Circle(){ var start=Node(0) def this(n:Int){ this() var tmp=start; for(i<-1 until n){ tmp.next=Node(i) tmp=tmp.next } tmp.next=start; } def printCircle(){ var tmp=start while(tmp.next!=start){ print(tmp.value+",") tmp=tmp.next } print(tmp.value+",") } def computeLast(m:Int):Int={ while(start.next!=start){ for(i<-0 until m-2){ start=start.next } start.next=start.next.next start=start.next } return start.value } case class Node(val value:Int,var next:Node=null) } object MicroSoft018 { def main(args: Array[String]): Unit = { val c=new Circle(10) c.printCircle() println() println(c.computeLast(3)) } }
2java版
http://blog.csdn.net/hxpjava1/article/details/224439473python版本
''' Created on 2017-1-18 @author: admin ''' from _overlapped import NULL class Circle: def __init__(self,n): if n<0: raise ValueError self.start=self.Node(0) tmp=self.start for i in range(1,n): tmp.next=self.Node(i) tmp=tmp.next tmp.next=self.start def computeLastValue(self,m): while self.start.next!=self.start: for i in range(0,m-2): self.start=self.start.next self.start.next=self.start.next.next; self.start=self.start.next return self.start.value def printCircle(self): tmp=self.start while(tmp.next!=self.start): print(tmp.value,end=",") tmp=tmp.next print(tmp.value) class Node: def __init__(self,value): self.value=value self.next=NULL if __name__ == '__main__': c=Circle(10) c.printCircle() print(c.computeLastValue(3))
相关文章推荐
- 算法与数据结构面试题(22)-求出在这个圆圈中剩下的最后一个数字
- 18 约瑟夫环问题 n个数字,每次从这个圆圈中删除第m个数字,求剩下的最后一个数字
- 圆圈中最后剩下的数字 【微软面试100题 第十八题】
- 求在这个圆圈中剩下的最后一个数字
- 【微软100题】n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数
- 18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。
- 圆圈中最后剩下的数字 【微软面试100题 第十八题】
- 【微软100题】写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回
- 微软面试100题之18题:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始... ...
- 第18题: 题目:n个数字(0,1,„,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]
- 求圆圈中剩下的最后一个数字
- 求圆圈中剩下的最后一个数字
- 100题_14 圆圈中最后剩下的数字
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]
- 程序员面试题100题第14题-圆圈中最后剩下的数字
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字
- 第18 题: 题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数 字)。