【问题标题】:Loop incrementing operations for sugarcane replication甘蔗复制的循环递增操作
【发布时间】:2019-01-22 17:01:18
【问题描述】:

我正在创建一个算法来计算甘蔗复制的面积。

我的初始种植面积为 5 公顷。这5公顷长成后会被砍掉,然后按1:7的比例克隆,所以我的第二个区域将有35公顷(5*7)

下一个区域的比例会降低,因为每次切割都会降低。

所以第三个区域将是 (5*6) + (35*7) 第四个区域:(5*5) + (35*6) + (245 * 7) 等等。用户将输入迭代次数和要相乘的比例。

手工操作会是这样的:

area[0] = initialArea;
            area[1] = area[0] * proportion[0]; // = 35
            area[2] = area[0] * proportion[1] + area[1] * proportion[0];
            area[3] = (area[0] * proportion[2]) + (area[1] * proportion[1]) + (area[2] * proportion[0]);
            area[4] = (area[0] * proportion[3]) + (area[1] * proportion[2]) + (area[2] * proportion[1]) + (area[3] * proportion[0]);
            area[5] = (area[0] * proportion[4]) + (area[1] * proportion[3]) + (area[2] * proportion[2]) + (area[3] * proportion[1]) + (area[4] * proportion[0]);

有没有办法可以将它放入循环中?

【问题讨论】:

    标签: c# report gis


    【解决方案1】:

    是的,你可以把它变成一个 for 循环。

    每次迭代的循环是:

    for (int n = 0; n < iteration; n++)
    {
        area[iteration] += area[n] * proportion[iteration - n - 1];
    }
    

    你可以用迭代次数来包装:

    for (int i = 1; i <= iterations; i++)
    {
        for (int n = 0; n < i; n++)
        {
            area[i] += area[n] * proportion[i - n - 1];
        }
    }
    

    您必须使用area[0] = intialArea 进行初始化。有输入:

    Console.Write("Enter inital area: ");
    double initialArea = double.Parse(Console.ReadLine());
    Console.Write("Enter proportions, separate each proportion with spaces: ");
    string input = Console.ReadLine();
    double[] proportion = input.Split(' ').Select(x => double.Parse(x)).ToArray();
    int iterations = proportion.Length;
    Console.WriteLine($"Using {iterations} iterations");
    
    double[] area = new double[proportion.Length + 1];
    area[0] = initialArea;
    
    for (int i = 1; i <= iterations; i++)
    {
        Console.Write($"Iteration = {i}: ");
    
        for (int n = 0; n < i; n++)
        {
            area[i] += area[n] * proportion[i - n - 1];
    
            Console.Write($"area[{n}] = {area[n]} ");
        }
    
        Console.WriteLine();
    }
    
    Console.ReadLine();
    

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 2013-05-04
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多