基本算法思维——学生郊游

问题

X学校最近组织了一场春游踏青活动,向Y公司租赁汽车运输学生。这次参加活动的总共有n个班级,
第i班总共有ai名学生,每辆车最大乘车人数为m,满足m>a1, a2, ..., an。乘车时必须按照班级排列顺序进行乘车,
不能调整班级顺序进行拼车。为保证同一个班级的学生在同一辆车上,如果当前汽车装完上一个班级后,下一个班级所有同学无法装下,
那么当前车开走使用下一辆车。问最少需要多少辆车才能把所有学生运完?

解决

(1)问题核心是一个班的人不能被拆开,必须在同一辆车。

(2)乘车顺序必须按照班级顺序,所以班级上车顺序为输入有序。

code

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String args[]) {
 5         Scanner s = new Scanner(System.in);
 6         int n = s.nextInt(); //班级数
 7         int m = s.nextInt();  //最大乘车数
 8         int ar[] = new int[n];
 9         int count = 0; //记录车的数量
10         
11         //输入班级
12         for(int i=0;i<n;i++) {
13             ar[i] = s.nextInt();
14         }
15         int temp; //记录当前上车人数
16         for(int i=0;i<n;) {
17             count++; 
18             temp = ar[i];
19             int j;
20             for(j=i+1;j<n;j++) {
21                 //为true时,表示多班级可以做同一辆车
22                 if((temp+ar[j])<=m) {  
23                     temp+=ar[j];
24                 }else {
25                     break;
26                 }
27             }
28             //更新还未上车班级的起始位置
29             i = j;
30         }
31         System.out.println(count);
32     }
33 
34 }

猜你喜欢

转载自www.cnblogs.com/dream-flying/p/12794461.html