JAVA基础

面试时碰到过一次约瑟夫问题的面试,写出了算法,但是不知道是不是正确,回来验证了下。

赛赛代码:

 

 

	public static void  accomplishByPlainMethod(int[] array, int key){
		
		//实现思路 : 如果谁出去后,就将数组的该位置置为0 ,在循环报数中,跳过此位置
		int offset = 0;  //记录当前的偏移量
		int index = 0;	     //报数的id
		int count = array.length; //数组中还剩下多少元素
		
		if(count < 4){
			System.out.println("没有必要进行该操作");	
		}
		
		while(true){
			if(array[index++] != 0){
					
				if((++offset) == key){			
					array[index-1] = 0;
					System.out.print("  "+index);
					offset = 0;
					count--;
				}
			}	
			if(index>=array.length){
				index = 0;
			}
			
			if(count == 1){		
				for(int i = 0; i < array.length; i++){
					if(array[i] != 0){
						System.out.println();
						System.out.println(" 最后一个出列的人: "+ (i+1));
					}
				}
				break;
			}		
		}
	}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值