问题
某工厂有 n 个零件加工的师傅,每位师傅每天能够加工出不同数量的零件。
现有 m 个零件要求一天加工完,请问该工厂最少需要派几个师傅来完成这次零件加工任务,如果安排所有的师傅都参与加工也不能在一天内完成任务,请输出NO。
1.分析问题
- 已知:总零件个数m,加工师傅的数量n,每个师傅每天能够加工出来的零件数量a[100]
- 未知:1天时间内加工所有零件需要的师傅数量x
- 关系:排序做减法
2.定义变量
//二、数据定义
int m,n,a[100],x=0;
3.输入数据
//三、数据输入
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
4.数据计算
最少需要派几个师傅来完成这次零件加工任务,所以应该优先减去加工数量多的师傅,即数组从大到小排列。
冒泡排序。
//四、数据计算
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j]<a[j+1]){
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<n;i++){
if(m>=a[i]){
m-=a[i];
++x;
}
}
5.输出结果
#include<iostream>
using namespace std;
int main(){
//一、分析问题
//已知:总零件个数m,加工师傅的数量n,每个师傅每天能够加工出来的零件数量a[100]
//未知:1天时间内加工所有零件需要的师傅数量x
//关系:排序做减法
//二、数据定义
int m,n,a[100],x=0;
//三、数据输入
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
//四、数据计算
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j]<a[j+1]){
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<n;i++){
if(m>=a[i]){
m-=a[i];
++x;
}
}
//五、输出结果
if(0==m){
cout<<x;
}else{
cout<<"NO";
}
return 0;
}