1)题目表述:一伙人在户外玩耍,在户外围城一个圈,最开始是随机坐的,当游戏开始时需要男生与男生挨着坐,女生与女生挨着坐,问需要移动几次能够达到目的(可以任意两个人相互移动算一次)
2)输入输出:
输入:10001001(说明:其中第一个人和最后一个人是挨着的)
输出:1次
3)难点讲解:
(1)首先数输入部分,未知有多少个,故使用cin.nextLine()整行进行接收,然后分为String数组,之后再转换类型变为整形存入集合中去。
(2)就是逻辑的推倒部分,其实只是需要两次遍历就好了。
package A_inPut_outPut;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class demo5 {
public static void main(String[] args) {
//昨天的题目,给一个数组:判断移动几次使得男男女女坐在一起
//1001010: 1次
//110101001:1次
//1010100101: 2次
//1010010101: 2次
//1)输入
Scanner cin=new Scanner(System.in);
String string=cin.nextLine();
String[] arrstring=string.split("");
System.out.println(Arrays.toString(arrstring));
List<Integer> list=new ArrayList<>();
for(int i=0;i<arrstring.length;i++){
list.add(Integer.valueOf(arrstring[i]));
}
System.out.println("list="+list);
//2)统计1的个数
int num=list.size();
System.out.println("num="+num);
int num1=0;
for(int i=0;i<list.size();i++){
if(list.get(i)==1) num1++;
}
System.out.println("num1="+num1);
//2)构造新的list,两个叠加在一起
List<Integer> newlist=new ArrayList<>(list);
for(int i=0;i<list.size();i++){
newlist.add(list.get(i));
}
System.out.println("newlist="+newlist);
//3)遍历逻辑
int max=0;
for(int i=0;i<num;i++){
int temp=0;
for(int j=i;j<i+num1;j++){
if(newlist.get(j)==1) temp++;
}
System.out.println("temp="+max);
max=temp>max?temp:max;
System.out.println("max="+max);
}
//4)结果
System.out.println("result="+(num1-max));
}
}
参考文献
原文链接:https://blog.csdn.net/hansionz/article/details/80871967