本帖最后由 李天富 于 2014-9-19 11:41 编辑
约瑟夫环吧。- /*
- 思路:新建一个长度为100的数组,然后不断遍历,并用temp记录空值位,
- 每当temp==14的时候,将该位赋值为1(或非空的其他值,就是做个标记),
- 同时用count记录数组中值为1的个数,并将temp清零,当count==99的时候,
- 也就是数组中只剩下一个空值位时停止遍历。最后遍历一次数组,找到空值位
- 的角标x,并返回x+1(因为数组是从0开始编号,所以要加1).
- */
- class Joseph
- {
- public static void main(String[] args)
- {
- int x=Joseph(100,14);
-
- System.out.println("x="+x);
- }
- public static int Joseph(int n,int k)
- {
- int[] a=new int[n];
- int count=0,temp=0,x=0;//count:记录数组中值为1的元素个数,temp:记录遍历到的空值的个数
- while (count<n-1)//不断遍历,只到数组中只剩一个空值位。
- {
- for (int i=0;i<a.length ; i++)
- {
- if(a[i]!=1)//因为数组默认初始化值为空,所以不等于1就是表示空位。
- temp++;
- if(temp==k)
- {
- a[i]=1;
- count++;
- temp=0;
- }
-
- }
- }
- for (int i=0;i<a.length ;i++ )//最后一次遍历,获取剩余最后一个空值位的角标。
- {
- if (a[i]!=1)
- {
- x=i;
- break;
- }
-
- }
- return x+1;
- }
- }
复制代码 |