查找一系列数字中的当前步骤

时间:2015-09-06 09:55:26

标签: c algorithm math

我尝试在C中创建一个简单的函数,它允许我们通过给出当前行号,总行数和步数来找到一系列数字的当前步骤...

数字系列示例:

line 0  - 0   --
line 1  - 0     |--> STEP 1
line 2  - 0   --
line 3  - 1   --
line 4  - 1     |--> STEP 2
line 5  - 1     |
line 6  - 1   --
line 7  - 2   --
line 8  - 2     |
line 9  - 2     |--> STEP 3
line 10 - 2     |
line 11 - 2   --

Parameters : currentLine = 5; totalLines = 12; steps = 3;

在这种情况下,我有三个不同的步骤,所有步骤再增加一行。每个步骤都用相同的数字表示,在行号旁边。

在我的例子中,我选择currentLine = 5,它代表我们想要找到当前步骤的行。所以在我的情况下,我需要找到:2。

我的函数原型给出了当前行的当前步骤:

int findCurrentStep(int currentLine, int totalLines, int steps);

我只是想知道如何计算它?

编辑:谢谢你的回答,我刚才采取了另一种方法。

int findCurrentStep(int currentLine, int totalLines, int steps)
{
    int step;
    int trim_lines;

    step = steps;
    trim_lines = totalLines;
    while (currentLine <= trim_lines -1)
    {
        trim_lines = totalLines - 3 + steps - 1;
        step--;
    }
    return step;
}

这只需一步,但没有几步......

2 个答案:

答案 0 :(得分:0)

编辑: -

这是一步法解决方案。

你需要发现currentLine等于或小于从3开始的AP的第一个r项。第一个总和超过currentLine的项将是currentStep。

假设currentLine小于或等于AP的第一个 r 项的总和。

所以,currentLine&lt; = 3 + ... + 3 +(r-1)* 1.

PSEUDO-CODE: -

initialStep = 3;  // initialStep is 3 in this case.
sum = currentLine;  .
currentStep = 0;
while(sum > initialStep){
   sum -= initialStep;
   initialStep = intialStep + 1;
   currentStep++;
}
requiredAnswer = currentStep + 1;

循环结束后你的答案是(currentStep + 1),因为当条件失败时,循环将被终止。

答案 1 :(得分:0)

如果总共x步和n行,则第一步发生的次数为a
然后,问题表明,

a + (a+1) + (a+2) + ... + (a+x-1) = n  //since x steps and n total lines

所以,这意味着,

x * (2*a + x - 1) = 2*n

现在,由于我们知道xn,因此请求a
知道a后,如果您要找到&#34;当前行为c,您可以看到k,这个不等式得到满足:

a + (a+1) + ... (a+k) < c <= a + (a+1) + ...(a+k+1)

然后,k+1将是您的答案。