本帖最后由 郑飞 于 2014-11-24 23:00 编辑
看到N次有人问这个问题 其实在今天之前也觉得难 没试过去做:L 太懒 现在给个通用简洁的方法 希望思路对大家有帮助- class Test
- {
- /*
- *定义一个某长度元素值全1的数组1个
- *count不断循环数组并累加所有元素值;
- *count逢3(len)时,元素值改为0(为了下次count访问并累加该元素时不计数,count的存在就是为了逐步把每个元素值都改为0);
- *这时update++(因为count遇到3(len)的倍数了,update记录);
- *当update为arr.length的时候说明找到最后一个元素,返回角标+1;
- **/
- public static void main(String[] args)
- {
- int[] arr = new int[arr.length];//定义一个长度50,元素值都为1的数组;
- for(int i = 0;i<50;i++)
- arr[i] = 1;
- System.out.println(test(arr,3));//给定数组,和间隔,调用方法;
- }
- public static int test(int[] arr,int len)
- {
- int result = -1;
- int temp ;
- for(int i =0,count = 0,update = 0;update<arr.length;i++)//上面说的很清楚了
- {
- if(i==50)//让循环一直持续
- i=0;
- temp = count;//记录上一次的累加结果
- count+=arr[i];//累加本次访问到的元素的值
- if(temp%len!=0&&count%len==0)//逢被len整除的元素
- {
- arr[i] = 0;//元素值改为0
- update++;//记录次数
- }
- result = i+1;//最后一次赋值作为返回值
- }
- return result;
- }
- }
复制代码
洁癖版本:个人喜好,给自己攒点成就感,提高编程兴趣,娱乐一下;- public static int test(int[] arr,int len)
- {
- int result = -1;
- for(int i =0,count = 0,update = 0;update<arr.length;i++,i = i==arr.length?0:i)
- if(count%len!=0&(count+=arr[i])%len==0)
- result = i+1+(arr[i]=(0*update++));
- return result;
- }
复制代码
|