提问者:小点点

以特定的方式遍历数组的索引


#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装进另一个集装箱。 我应该如何纠正这个问题?


共1个答案

匿名用户

您的目标是计算需要多少个容器来存储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++解决方案可能会使用向量而不是数组。