问题描述
题目大概是1-100取第七个数 7 14 21....98,然后从99开始继续取第七个:5 ,12 19...我能想到的方法是定义一个长度为7的数组,然后把这100个数依次放进去取下标为6的数,累计到50跳出.但是纠结了很久不会用程序实现,求人指点!Ps:新手刚学到java基础的数组. 问题补充:之前提的问题是我的错误 第二次从99开始循环取第七个数是 5 13 22 (忘记抛出之前已经取到的7 14 21....)麻烦刚才的2位好心人了
解决方案
int[] array=new int[102];//需遍历的数组,初始为0,int j=1;//遍历时计数用int k=7;//取第几个数,这里为7int count=0;//统计输出个数for (int i = 1; i < array.length; i++) {if(i==array.length-1){//超过100,置1,类似循环数组i=1;}if(array[i]==0){//未遍历到的值,计数加1if(j==k){//第k个数array[i]=1;//置为非0值,这里为1j=1;//计数归1count++;System.out.println(i);}elsej++;}if(count==50)break;}
解决方案二:
//需要写个类,设置常量list = 需要遍历的数组,size 是需要提取的总数。private List<Integer> get7OfList(List<Integer> list, int size) {List<Integer> copyList = new ArrayList<Integer>();copyList.addAll(list);int j = 0;for (int i = 1; i < list.size(); i++) {if (i % 7 == 0 && result.size() < size) {result.add(list.get(i - 1));copyList.remove(i - 1 - j);++j;} else if (result.size() > size) {break;} else {continue;}}list.removeAll(list);list.addAll(copyList.subList(copyList.size() - 2, copyList.size()));list.addAll(copyList.subList(0, copyList.size() - 3));if (result.size() < 50) {get7OfList(list, size);}return result;}
解决方案三:
提供一个比较麻烦的: public static void main(String[] args) {List l = new ArrayList();int k = 0, n = 0;while (k < 50) { if (n < 7) {n++;continue; } if (n == 7 && k == 0) {l.add(n);k++; } else {n += 7;l.add(n);k++; }} }
解决方案四:
遍历初始化为0的数组,遇0加1,加到7时输出数组下标并将数组此项置为非0值。int[] array=new int[102];//需遍历的数组,初始为0,int j=1;//遍历时计数用int k=7;//取第几个数,这里为7int count=0;//统计输出个数for (int i = 1; i < array.length; i++) {if(j==k){//第k个数array[i]=1;//置为非0值,这里为1j=1;//计数归1count++;System.out.println(i);}if(array[i]==0){//未遍历到的值,计数加1j++;}if(i==array.length-1){//超过100,置1,类似循环数组i=1;}if(count==50)break;}
解决方案五:
//直接加7模100即可int count=0;for(int i=0;i<50;i++){count=(count+7)%100;System.out.println(count);}
解决方案六:
int j=0;//循环50次for(int i=0;i<50;i++){//小于100就叠加7if((j+7)<=100){j+=7;}else{//大于100,就减掉100,剩下的作为起始值进入下一次循环int num=j+7-100;j=num;}System.out.println(j);}