循环链表(隔M杀1)

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>隔m杀1</title>
</head>
<body>

</body>
</html>
<script>
(function(w){
function Person(ele){
	this.ele = ele;
	this.next = null;
}
w.List = function(){
	this.head = new Person(1);
	this.head.next = this.head;
}
List.prototype={
	//插入item元素后面
	insert:function(newPer,item){
		var later = item.next;
		item.next = newPer;
		newPer.next= later;
	},
	//查找元素
	find:function(item){
		var current = this.head;
		while(current.next !== this.head && current.next !== item){
			current = current.next;
		}
		return current;
	},
	//打印所有元素
	print:function(){
		var current =this.head;
		var str = current.ele;
		while(current.next !== this.head){
			current = current.next;
			str += ","+current.ele;
		}
		document.write(str);
	},
	//快速生成链表元素
	add:function(m){
		var temp;
		var count;
		if(m>1){
			count = 2;
			temp =  new Person(2);
			this.head.next =temp;
			while(++count <= m){
				this.insert(new Person(count),temp);
				temp = temp.next;
			}
			temp.next = this.head;
		}
	},
	//找到元素
	find:function(item){
		var current = this.head;
		while(current.ele !== item && current.next !== this.head){
			current = current.next;
		}
		return current;
	},
	//找到前一个
	findpre:function(item){
		var current = this.head;
		var pre;
		while(current.ele !== item && current.next !== this.head ){
			pre = current;
			current = current.next;
		}
		return pre;
	},
	//找到后面第几位
	findLater:function(item,n){
		var current = this.find(item);
		var count = 0;
		while(++count <= n){
			current = current.next;
		}
		return current;
	},
	//实时链表长度
	len:function(){
		var count=1;
		var current = this.head;
		while(current.next !== this.head){
			count++;
			current = current.next;
		}
		return count;
	}
}
})(window)
//任务:40人隔3杀1
function game(n,m){
	var list = new List();
	list.add(n);
	var del,pre;
	var current = list.head;
	while(list.len() >= m){
		del = list.findLater(current.ele,m-1);
		if(del === list.head){
			list.head = list.head.next;
		}
		pre = list.findpre(del.ele);
		pre.next = del.next;
		current = list.findLater(current.ele,m-1)
	}
	list.print();
}
game(1000,3)
</script>

  

时间: 2024-10-02 01:36:38

循环链表(隔M杀1)的相关文章

编程逻辑题

1.请问同时满足这样条件的数:被10除余9,被9除余8,被8除余7,在100至1000之间,有几个这样的数? 2.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3.判断101-200之间有多少个素数,并输出所有素数. 4.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个"水仙花数",因为153=1的三

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

循环链表例题

/*n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈, 顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏, 活到最后的一个人是胜利者. 请输出最后一个人的编号. Input 输入n和m值.m>1. Output 输出胜利者的编号. Sample Input 5 3 Sample Output 4 */ #include <stdio.h> #include <stdlib.h> typedef struct lnode{ int dat

高速公路出省高峰明起杀到 粤北站出省车流量破纪录

北京时间12日消息,据国外媒体报道,美国航空航天局(NASA)的一项新研究发现,过去数十年来南极海冰的增加并不足以抵消加速减少的北极海冰.整合两极的数据可以看到,全球海冰面积正以平均每年约35000平方公里的速度减少,换句话说,每年减少的海冰面积比美国马里兰州还大将北极海冰的减少量与南极海冰增加量进行整合之后,可以发现自1979年以来,全球海冰面积正以平均每年约35000平方公里的速度减少,换句话说,每年减少的海冰面积比美国马里兰州还大. "尽管去年九月,南极海冰面积达到了新的最大记录,但全球海

MHA大杀器——mysql主、从双击热备配置安装解析

MHA的主要作用: 在mysql的主从复制中,当master崩溃了,利用mha实现backup顶替崩溃的master自动切换为master继续工作,从而实现高可用. 下面介绍本次实验的环境: MHA分为manager管理节点和node节点,一般来讲最少是三台服务器,两台node节点,一台manager节点,但本次环境限制,只能使用两台,所以把manager也装在一台node节点上. 两台服务器,两个网口: IP: 10.2.16.253     10.0.0.1  node1 10.2.16.2

c语言循环链表的问题

今天,老师说了一道题,大意是,有一群小朋友10个人,但是老师只有一个苹果,只能给一个小朋友,于是老师就决定让小朋友们做成一圈,从第一个小朋友开始,每隔一个小朋友就没有机会得到苹果,最后剩下的一个人可以得到,现在老师想知道这个幸运儿会是谁. 然后老师要求这个问题用循环链表解决,自己也顺带复习一下,直接上代码 struct data { int num; struct data *next; }; int main() { struct data *p,*head,*pnew; int n=2; p

从曹操杀华陀而联想到的系统性能问题才是真正的致命的问题

引子 公元1800年前,一代枭雄曹操此时已经病入膏肓.曾经征战四方,挟天子以令诸侯.筑铜雀以显四海之威名的曹操躺在病床上再也忍受不了头疼欲裂的痛苦. 此时的曹操只能无力的从病榻上伸出惨白的手颤抖和无力的在空中挥舞着,他用尽全身最后一点力气呼喊道"华陀呢...叫华陀...华陀在哪...叫华陀呀",而持卫所能贡上的却只有华陀的人头 :"报丞相,华陀己被斩首" :"啊...这,这...啊..." 一代枭雄就此丧命! <三国演义>第七十八回:

小孩报数问题(循环链表)_约瑟夫

小孩报数问题(循环链表) TimeLimit:1000MS  MemoryLimit:65536K 64-bit integer IO format:%lld Problem Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序. Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名

约瑟夫问题--list模拟循环链表

约瑟夫问题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者. 请输出最后一个人的编号. 输入 输入n和m值. 输出 输出胜利者的编号. 示例输入 5 3 示例输出 4 首先说一下写这个之前我是准备徒手艹链表的,可惜意志力实在不咋滴,再加上手头上没课本,之前我有看过