题目分析
输入三个数字分别代表r,g,b三组学生数量,缆车按照r-g-b-r的方式循环,每一分钟来一辆车,且初始0时r车准备出发。全程上山时间为30分钟。
思路分析
每走一辆车则到达山顶的时间就多一分钟,那只需要计算走了多少辆车。如果按照笨方法,顺着题目思路去做,每辆车一走,车人数就-2,如果三个车都没人了就结束
代码
java">
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc =new Scanner(System.in);int count=29;//初始化29,是缆车走到山顶的必要时间,但是为了让方法规整化,即第一辆缆车上山时间是0+count,但是其他的都是1+count,所以让count初始值变成29,这样也不影响后续操作int r= sc.nextInt();//输入r车人数int g= sc.nextInt();//输入g车人数int b= sc.nextInt();//输入b车人数while (r>0||g>0||b>0){//循环当三辆车都没人时自动结束r-=2;//出发人数-2count+=1;//车辆+1if (g<=0&&b<=0&&r<=0){//如果都没人了break;//不用装下一车了}g-=2;//出发人数-2count+=1;//车辆+1if (r<=0&&b<=0&&g<=0){//如果都没人了break;//不用装下一车}b-=2;//出发,人数-2count+=1;//车辆+1if (g<=0&&r<=0&&b<=0){//如果都没人了break;//结束}}System.out.println(count);//输出29+载走了多少辆车}
}
但是这样看呢,重复的代码太多了,我们就再重新理一理
java">
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc =new Scanner(System.in);int count=29;//同样初始时间为30int[] arr=new int[3];//数组用于存值arr[0]=sc.nextInt();//手动存值rarr[1]=sc.nextInt();//手动存值garr[2]=sc.nextInt();//手动存值bboolean o=true;//锁定不断上车while (o){//在人数全部走完之前一直上车for (int j = 0; j < arr.length; j++) {//每一轮上车情况arr[j]-=2;//上车人数-2count+=1;//时间+1if (panduan(arr[0],arr[1],arr[2])){//扔进判断函数看当前是否已经人走完了该结束o=false;//结束外层while循环break;//结束for循环}}}System.out.println(count);//输出结果}static boolean panduan(int r,int g,int b){//判断目前人数情况if (g<=0&&r<=0&&b<=0){//如果都没人了return true;//返回true说明可以结束了}return false;//还有人就继续}
}
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。