#include <iostream>
using namespace std;
int main(){
int n;
int *weight;
int index,container;
cout<<"Enter number of weights (1<=number<=10^5) you have: "<<endl;
cin>>n;
weight = new int[n];
cout<<"Enter "<<n<<" number of weights (0<=weights<10^4) to the array:"<<endl;
for(int i=0;i<n;i++){
cin>>weight[i];
}
int i=0;
while(i<n){
index=weight[0]+4;
if(index!=weight[i]){
container++;
index=weight[i]+4;
}
i++;
}
cout<<container<<endl;
return 0;
}
首先,输入数组大小(数字),然后输入数组的元素(权重)。 我们认为数组的所有输入都已排序。 那么输出应该打印容器的数量。 我们认为数组的8个权重输入(1,2,3,7,12,14,21,22)是这样的。 一个集装箱只能装载最小重量+4重量的货物。 例如:集装箱1-1,2,3,集装箱2-7,集装箱3-12,14,集装箱4-21,22,像这样。 容器1的最小重量为1,则它只能装载1,2,3,4,5重量。 从第6重量开始,它应该装到另一个集装箱上,直到6(最小重量)+4 10。 等等。
这是我为那个问题编写的代码。 但当它取最小重量时,它就会以错误的方式得到它。 如果数组中有1,2,3,4,5,6。 此代码获取所有元素的最小权重。 但最小重量为1,(1+4)1,2,3,4,5装进一个集装箱,6装进另一个集装箱。 我应该如何纠正这个问题?
您的目标是计算需要多少个容器来存储N个物品,其中给定容器中的所有物品最多比该容器中重量最轻的物品重4。
以下应该会有所帮助(它假定权重数组是按升序排序的):
#include <iostream>
using namespace std;
int main()
{
const int LEN = 8;
int weight[LEN] = {1,2,3,7,12,14,21,22};
int container_index = 0;
int container_count = (LEN > 0) ? 1 : 0;
for (int ii = 0; ii < LEN; ii++) {
if (weight[ii] > weight[container_index] + 4) {
container_count++;
container_index = ii;
}
}
cout << container_count << endl;
return 0;
}
结果如下:
[1,2,3,7,12,14,21,22]
=>; 4个容器([1,2,3]
,[7]
,[12,14]
和[21,22]
)[1,2,3,4,5,6]
=>; 2个容器([1,2,3,4,5]
和[6]
)最后一点评论:您使用的是C++,但您使用的是C风格的代码和数组,所以我在回应中也是这样做的。 例如,一个惯用的C++解决方案可能会使用向量而不是数组。