我尝试在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;
}
这只需一步,但没有几步......
答案 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
现在,由于我们知道x
和n
,因此请求a
。
知道a
后,如果您要找到&#34;当前行为c
,您可以看到k
,这个不等式得到满足:
a + (a+1) + ... (a+k) < c <= a + (a+1) + ...(a+k+1)
然后,k+1
将是您的答案。