【问题标题】:How can we multiply each elements of an array to each other and store each product values in a array in c++?我们如何将数组的每个元素相乘并将每个乘积值存储在 c++ 中的数组中?
【发布时间】:2020-09-21 15:26:45
【问题描述】:

示例:假设我们有一个 arr1 [1,2,3,4] 数组,产品将是 1x2、1x3、1x4、2x1、2x3、2x4、3x1、3x2、3x4、4x1、4x、4x3 .所以新数组就像 arr2 [2,3,4,2,6,8,3,6,12,4,8,12]。 我考虑过:

for( int i=0; i<n; i++){
    for(int j=0; j<n; j++){
       arr2[i]= arr1[j] * arr1[j+1];
    }
}

但这只会增加连续的元素,而不是全部。 谁能告诉我逻辑/算法?

【问题讨论】:

  • 听起来你需要嵌套循环。还有“a for loop with i=0 to n and i++ { arr2[i]= arr1[i] *arr[i+1]; }” 实际显示循环不是更容易吗?
  • 您的问题还不清楚。一方面,您将实际需求和实施细节混合在一起。如果您只需要独特的产品,那么真的有必要将它们存储在数组中吗?
  • 好的,我添加了代码。我知道逻辑不对。这意味着我们需要先找出每个元素的乘积,然后将其存储到另一个数组中。我可以摆脱重复。但我被困在第一部分。
  • 所以最终数组将是 arr2[2,3,4,6,8,12]。 将乘法结果存储在 std::set 中,您将获得免费排序和删除重复项。
  • @PaulMcKenzie 想象一个世界,初学者在循环之前学习算法,在指针之前学习迭代器,std::string 在 c 字符串之前......

标签: c++ arrays multiplication


【解决方案1】:

在进行乘法运算之前,使用if 语句检查i != j

您还需要另一个索引变量来保存输出数组中的索引,您不能为此使用i,因为它停在n。您也不能使用i*n + j,因为您正在跳过元素(可能有所需索引的公式,但使用另一个变量更简单)。

int k = 0;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (i != j) {
            arr2[k++] = arr1[i] * arr1[j];
        }
    }
}

【讨论】:

  • 我可以提供Live Demo on coliru。唔,不!它仍然会删除重复项 - 抱歉。 ;-)
  • @Scheff 坦率地说,在将每个条目放置两次后删除重复项有点......愚蠢。内循环应该从 i+1 开始,尽管这不符合更新后的目标
  • @idclev463035818 问题说他想要2x1,所以内循环需要从0开始
  • @idclev463035818 我必须承认,如果它可以追溯到我的真实姓名,我不会让它进入生产代码。
  • @Barmar 我仍在参考 Scheff 也提到的旧帖子。对不起,我现在就闭嘴:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多