微软100题-天天做-第18题

来源:互联网 发布:windows触摸屏无法使用 编辑:程序博客网 时间:2024/05/22 12:30
第18题(数组):
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
求出在这个圆圈中剩下的最后一个数字。

July:我想,这个题目,不少人已经 见识过了。

package com.microsoft;public class CircleDelete {private Node root;public CircleDelete(int n){Node last=null;for(int i=0;i<n;i++){Node node=new Node();node.value=i;if(root==null){root=node;last=node;}else{if(i==n-1){last.next=node;node.next=root;}else{last.next=node;last=node;}}}}public void delete(int m){int n=m;while(n>2){n--;root=root.next;}root.next=root.next.next;root=root.next;if(root.next==root){System.out.println("last node value is:"+root.value);return;}delete(m);}private class Node{private Node next;private int value;}public static void main(String[] args) {CircleDelete circle=new CircleDelete(10);circle.delete(2);}}


0 0
原创粉丝点击