gpt4 book ai didi

c++ - 数学 - 返回索引添加先前跳过的索引的函数

转载 作者:行者123 更新时间:2023-11-27 23:37:12 24 4
gpt4 key购买 nike

我试图找到一种方法来跳过一些索引并将跳过的索引数添加到索引中。

例如,

我想跳过所有能被 4 整除的索引,并添加那些跳过的索引。

即,如果 index = 44 mod 4 == 0,那么index 变为 5

如果 index = 88 mod 4 == 0,但是 index 变为 10,因为我们已经不得不跳过 4。

同样,如果 index = 1616 mod 4 == 0,但index 变为 21。因为 16 + 4 = 20,也是 4 的倍数,所以我们跳过它并转到下一个索引 21。

好的,让我尝试通过我正在尝试的代码片段来解释它。

int fn(int i) {
if (i <= 0) {
return 0;
}
if (i % 4 == 0) {
return fn(i / 4) + (i / 4);
} else {
return i / 4;
}
}

for (int i = 0; i < 100; i++) {
int bl = fn(i);
cout << "block:" << i << endl << "Translated:" << bl << endl;
}

但是如您所见,它无法正常工作。有什么想法吗?

最佳答案

每 block 四个连续数字(如 1、2、3、4 或 5、6、7、8)包含三个可用索引和一个应跳过的索引。所以我们需要做的就是:

  • 除以三得到所需的 block 数。
  • 将该数字乘以 4 以从多个可用索引切换到多个原始索引。
  • 将余数对 3 取模以说明最后一个 block 中的位置。
  • 调整,因为我们显然想从索引 1 开始。因此调整是减一(转换为从零开始的索引),进行上述计算,然后加一(转换回从一开始的索引) .

这个程序:

#include <stdio.h>


int fn(int i)
{
return (i-1)/3*4 + (i-1)%3 + 1;
}


int main(void)
{
for (int i = 1; i < 17; ++i)
printf("%d -> %d.\n", i, fn(i));
}

产生这个输出:

1 -> 1.2 -> 2.3 -> 3.4 -> 5.5 -> 6.6 -> 7.7 -> 9.8 -> 10.9 -> 11.10 -> 13.11 -> 14.12 -> 15.13 -> 17.14 -> 18.15 -> 19.16 -> 21.

关于c++ - 数学 - 返回索引添加先前跳过的索引的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58435291/

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