来自招商银行信用卡中心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 }