日期:2014-05-20 浏览次数:20932 次
package cn.dzr.testnumber;
import java.util.Scanner;
public class NumberGet
{
static int pos = 0;
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in);
System.out.println("请输入n的值:(即数组的最大元素)");
int n = sc.nextInt();
System.out.println("请输入m的值:(即报数的最大值):");
int m = sc.nextInt();
System.out.println("n: "+n + "m: "+ m);
int[] arr = new int[n];
sc.close();
for(int i =0 ;i<n; i++)
{
arr[i] = i+1;
}
// int pos = 0;
while(arr.length>0)
{
int num = getNum(arr,m);
System.out.print(num+" ");
if(arr.length==1)
{
break;
}
arr = getNewArr(arr,pos);
}
System.out.println("over");
}
private static int getNum(int[] arr, int i)
{
//获取该删除的数字的位置..
if(arr.length ==1)
{
return arr[0];
}
pos = pos+ i -1;
//当pos的位置大于数组的长度的时候,需要减去数组的长度...
while(pos>arr.length-1)
{
//当i的值大于或者等于数组的长度的时候,需要将i减去数组的长度的x倍直到i小于数组长度为止。
while(arr.length<i)
{
i = i-arr.length;
}
pos = pos + i - 1 - arr.length;
}
int num = arr[pos];
return num;
}
private static int[] getNewArr(int[] arr, int pos)
{
//该方法获取一个数组第pos个元素被删除后的新数组...
int len = arr.length;
int[] newArr = new int[len-1];
//pos之前的元素未发生变化
for(int i=0;i<pos;i++)
{
newArr[i] = arr[i];
}