gpt4 book ai didi

c++ - 在 C/C++ 中将循环间隔减少 1

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:54:29 26 4
gpt4 key购买 nike

假设我有 15 个元素。我想按以下方式对它们进行分组:

group1 = 1 - 5
group2 = 6 - 9
group3 = 10 - 12
group4 = 13 - 14
group5 = 15

这样我将得到每个组中的元素,如下所示:

group1 = 5
group2 = 4
group3 = 3
group4 = 2
group5 = 1

如您所见,循环间隔正在减少。

我以 15 为例。在实际程序中,它是用户驱动的参数,可以是任何东西(希望几千)。

现在我正在寻找的是:group1 中的任何内容都应具有变量“loop”值 0,group2 应具有 1,group3 应具有 2 等等...“loop”是一个 int 变量,用于计算其他一些东西。

换句话说

我有一个名为“loop”的整型变量。我想通过以下方式为其分配值(value):前 n 帧循环值 0 接下来 (n -1) 帧循环值 1 然后下 (n - 2) 帧循环值 2 一直到循环值 (n - 1)

假设我的时间轴上有 15 个帧。

所以 n 将是 5 ====>>>>>(5 + 4 + 3 + 2 + 1 = 15;因为间隔递减 1)

然后

前 5 帧 (1 - 5) 循环为 0 然后接下来的 4 帧 (6 - 9) 循环为 1 然后接下来的 3 帧 (10 - 12) 循环为 2 然后接下来的 2 帧 (13 - 14) 循环为 3最后一帧 (15) 循环是 4。

frames       "loop" value
1 - 5 => 0
6 - 9 => 1
10 - 12 => 2
13 - 14 => 3
15 => 4

我试过模数 (%)。但问题在于第 12 帧循环为 2,因此 (12 % (5 - 2)) 余数为 0,因此它会增加循环值。以下几行是在求解器中运行的示例代码。 @loop默认为0,@Frame为当前处理帧号。

int loopint = 5 - @loop;

if (@Frame % loopint == 0)
@loop += 1;

最佳答案

如果我理解正确的话,那么

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
int n = atoi(argv[1]);

for(int i = 1; i <= n; ++i) {
printf("%d: %f\n", i, ceil((sqrt(8 * (n - i + 1) + 1) - 1) / 2));
}
}

是 C 中的实现。

这背后的数学原理如下:您拥有的 1 + 2 + 3 + 4 + 5 是一个高斯和,对于 n 项,它具有封闭形式 S = n * (n + 1)/2。对 n 求解,我们得到

n = (sqrt(8 * S + 1) - 1) / 2

如果您想在开始时使用短距离,则向上舍入将为我们提供解决方案,也就是说 1, 2, 2, 3, 3, 3, ...

由于您希望拉伸(stretch)逐渐变短,我们必须颠倒顺序,因此 S 变为 (n - S + 1)。因此上面的公式。

编辑:请注意,除非您的数据集中的元素数量恰好符合 n * (n+1)/2 模式,否则您在开始或结束时的延伸会更短。此实现将不规则拉伸(stretch)放在开头。如果你想要他们在最后,

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
int n = atoi(argv[1]);

int n2 = (int) ceil((sqrt(8 * n + 1) - 1) / 2);
int upper = n2 * (n2 + 1) / 2;

for(int i = 1; i <= n; ++i) {
printf("%d: %f\n", i, n2 - ceil((sqrt(8 * (upper - i + 1) + 1) - 1) / 2));
}
}

做到了。这将计算超出元素计数的下一个这样的数字,然后计算如果您有那么多元素将拥有的数字。

关于c++ - 在 C/C++ 中将循环间隔减少 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40823527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com