不同的数字组成的圆圈中删除第m 个数字
来源:互联网 发布:二元期权模拟软件 编辑:程序博客网 时间:2024/05/01 03:24
public class A15 {/** *n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始, *每次从这个圆圈中删除第m 个数字 *(第一个为当前数字本身,第二个为当前数字的下一个数字)。 *当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。 *求出在这个圆圈中剩下的最后一个数字。 * * 印象中,这个是数据结构中的一道作业题来着 * @param args */public static void main(String[] args) {int[] array={1,2,3,4,5,6,7,8};CircleNode header = CircleNode.initialize(array);int m = 2;System.out.println(deleCircleM(header,m));}/** * @param header * @param m * @return */private static int deleCircleM(CircleNode node, int m) {int temp = m;while(node.getValue() != node.getAfter().getValue()){//确定删除的元素while(m>1){node = node.getAfter();m--;}CircleNode preNode = getPreNode(node);//保证环不断preNode.setAfter(node.getAfter());//当前的节点变为删除后的那个节点node = node.getAfter();//恢复m的值,再次的循环m = temp;}return node.getValue();}/** * 得到前一个节点 * @return */private static CircleNode getPreNode(CircleNode node) {CircleNode temp = node;while(temp.getAfter().getValue() != node.getValue()){temp = temp.getAfter();}return temp;}}class CircleNode{private int value ;private CircleNode after = null;public static CircleNode initialize(int[] array){CircleNode header = new CircleNode();header.setValue(array[0]);CircleNode temp = header;for(int i=1;i<array.length;i++){CircleNode node = new CircleNode();node.setValue(array[i]);temp.setAfter(node);temp = node;}//首尾相连temp.setAfter(header);return header;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public CircleNode getAfter() {return after;}public void setAfter(CircleNode after) {this.after = after;}}
心平气和的写代码,是一件很快乐的事情。。。
看到一种比较简单的解法:
int f(int n, int m)
{
int i, r = 0;
for (i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}
- 不同的数字组成的圆圈中删除第m 个数字
- 算法 - n个数字形成的圆圈中循环删除第m个数字(C++)
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字),当一个数字删除后,从被删除数字的下一个继续删除第m个数
- 18 约瑟夫环问题 n个数字,每次从这个圆圈中删除第m个数字,求剩下的最后一个数字
- 第18题: 题目:n个数字(0,1,„,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下
- 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除
- 【微软100题】n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数
- n个数字形成一个圆圈,隔m个数字删除一个的问题
- n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字
- n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字
- n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字
- 18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
- <仅是自己做笔记。。。系列-10>n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
- 第18 题: 题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数 字)。
- 删除第m个数字
- shell中条件判断if中的-z到-d的意思
- 由LG 的G2手机浅析国产旗舰机的方向
- Javascript 对象类型
- 用c语言写cgi程序(3)---实现文件上传
- POJ 3321 Apple Tree
- 不同的数字组成的圆圈中删除第m 个数字
- asp.net网站第一次加载慢的原因
- Project Euler problem 26
- JS滚轮事件onmousewheel
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- Code Refactor-编程命名(2)
- iOS7初体验(1)——第一个应用程序HelloWorld
- C#高级编程读书笔记 - 第五章泛型
- Oauth对请求合法性的讲解