来自招商银行信用卡中心2019秋招IT笔试(测试开发方向第三批)

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

公司组织团建活动,到某漂流圣地漂流,现有如下情况:
员工各自体重不一,第 i 个人的体重为 people[i],每艘漂流船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
为节省开支,麻烦帮忙计算出载到每一个人所需的最小船只数(保证每个人都能被船载)。

输入描述:
第一行输入参与漂流的人员对应的体重数组,

第二行输入漂流船承载的最大重量

输出描述:
所需最小船只数

输入例子1:
1 2
3

输出例子1:
1

思路是从大到小往船里装人,装不下就下一艘,先装大的后装小的。
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int p[1000],l,pp,i=0,num,sum=0,ls=0,ppp=0;
 9     while(cin>>pp)
10     {
11         p[i++]=pp;
12     }
13     l=p[i-1];
14     p[i-1]=0;
15     num=i-1;
16     sort(p,p+num-1);//默认从小到大
17     for(int j=1;j<=num;j++)
18     {
19         if(ppp>=num)break;
20     for(i=num-1;i>=0;i--)
21     {
22         if(ls==l)
23             break;
24         if(p[i]!=0&&p[i]+ls<=l)
25         {
26             ls+=p[i];
27             p[i]=0;
28             ppp++;
29         }
30     }
31         sum++;
32         ls=0;
33     }
34     printf("%d\n",sum);
35     return 0;
36 }