为了账号安全,请及时绑定邮箱和手机立即绑定

我想通过将输入数组的所有项目相乘来计算,但除了第 i 个项目

我想通过将输入数组的所有项目相乘来计算,但除了第 i 个项目

C#
慕容森 2022-06-12 11:21:22
举个例子给定以下数组,inputArray: [2,3,6,8]结果数组将是: resultArray: [144,96,48,36]resultArray[0] = inputArray[1] * inputArray[2] * inputArray[3]resultArray[1] = inputArray[0] * inputArray[2] * inputArray[3]resultArray[n] = inputArray[0] *...* inputArray[n-1] * inputArray[n+1] *...* inputArray[last]我已经编写了如下代码,但是如何使用 for 或其他循环进行此计算。static void multiply()    {        int[] inputArray = { 2, 3, 6, 8 };        int[] resultArray = { 1, 1, 1, 1 };        for (int i = 0; i < inputArray.Length; i++)        {            Console.Write(inputArray[i] + " ");        }        Console.WriteLine();        //for (int i = 0; i < inputArray.Length; i++)        //{        //    resultArray[i] = inputArray[0] * inputArray[i - 1] * inputArray[i + 1];        //}        resultArray[0] = inputArray[1] * inputArray[2] * inputArray[3];        resultArray[1] = inputArray[0] * inputArray[2] * inputArray[3];        resultArray[2] = inputArray[0] * inputArray[1] * inputArray[3];        resultArray[3] = inputArray[0] * inputArray[1] * inputArray[2];        for (int i = 0; i < resultArray.Length; i++)        {            Console.Write(resultArray[i] + " ");        }    }
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

我的方法遵循许多人的思路。为了简单起见,我使用了 LINQ。


        int fullProduct = 1;

        List<int> input = new List<int> { 2, 3, 6, 8 };

        List<int> result = new List<int>();


        input.ForEach(v => { fullProduct *= v; });

        input.ForEach(c=>

        {

           result.Add(fullProduct / c);

        });


查看完整回答
反对 回复 2022-06-12
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

使用 Linq 执行此操作的一种方法是使用Aggregate获取值的总乘积,然后将结果值分配为等于乘积除以当前循环索引处的输入项:


static void Multiply()

{

    int[] input = { 2, 3, 6, 8 };

    int[] result = new int[input.Length];


    var product = input.Aggregate((i, j) => i * j);


    for (int i = 0; i < input.Length; i++)

    {

        result[i] = product / input[i];

    }


    Console.WriteLine(string.Join(" ", input));

    Console.WriteLine(string.Join(" ", result));

    Console.ReadKey();

}

输出

//img1.sycdn.imooc.com//62a55bee00017a2e11640664.jpg

查看完整回答
反对 回复 2022-06-12
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

class Program

{


    static int GetMulResult(int[] input, int ommitingIndex)

    {

        int result = 1;

        for(int i = 0; i < input.Length; i++)

        {

            if (i == ommitingIndex)

                continue;


            result *= input[i];

        }


        return result;

    }

    static void Main(string[] args)

    {

        int[] inputArray = { 2, 3, 6, 8 };


        int[] result1 = new int[4];



        for(int i = 0; i < inputArray.Length; i++)

            result1[i] = GetMulResult(inputArray, i);




    }

}

PS。恐怕如果你不能创建这样一个简单的算法,你将无法创建更多可用的算法。你应该为此努力。


查看完整回答
反对 回复 2022-06-12
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号