- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码是某人设计的,用于更改数组 [a1 a2...am b1 b2..bn ]
到数组[b1 b2 ..bn a1 a2..am]
,但它涉及最大公约数,我无法理解。
void Exchange(int a[],int m,int n,int s){
int p=m,temp=m+n;int k=s%p;
while(k!=0){temp=p;p=k;k=temp%p;}
for(k=0 ; k<p ;k++){ //below is where i cant't understand
temp=a[k];i=k;j=(i+m)%(m+n);
while(j!=k)
{a[i]=a[j];i=j;j=(j+m)%(m+n);}
a[i]=temp;
}
};
编辑:“正确”缩进:
void Exchange(int a[], int m, int n, int s) {
int p = m, temp = m + n, k = s % p;
while (k != 0) {
temp = p;
p = k;
k = temp % p;
}
for (k = 0 ; k < p; k ++) { // below is where i cant't understand
temp = a[k];
i = k;
j = (i + m) % (m + n);
while (j != k) {
a[i] = a[j];
i = j;
j = (j + m) % (m + n);
}
a[i] = temp;
}
};
最佳答案
该代码使用单个开销值来实现数组旋转。如果长度互质,则一次就足够了。如果不是,则必须按照长度的 GCD 重复移位周期
我之前说过,SO 上还有其他问题涵盖了这一点。一看发现SO 3333-3814它处理单个旋转。不久前我修改了一些代码来支持这一点,演示了 GCD 的必要性,但我之前没有发布它。
这是代码 - 它使用 C99 VLA - 可变长度数组。
#include <stdio.h>
static int gcd(int x, int y)
{
int r;
if (x <= 0 || y <= 0)
return(0);
while ((r = x % y) != 0)
{
x = y;
y = r;
}
return(y);
}
static void dump_matrix(int m, int n, int source[m][n])
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
printf("%4d", source[i][j]);
putchar('\n');
}
}
static void init_matrix(int m, int n, int source[m][n])
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
source[i][j] = (i + 1) * (j + 2);
}
}
static void rotate_1col(int n, int vector[n], int z)
{
z %= n;
if (z != 0)
{
int c = gcd(n, z);
int s = n / c;
for (int r = 0; r < c; r++)
{
int x = r;
int t = vector[x];
for (int i = 0; i < s; i++)
{
int j = (x + z) % n;
int v = vector[j];
vector[j] = t;
x = j;
t = v;
}
}
}
}
static void rotate_cols(int m, int n, int source[m][n], int z)
{
for (int i = 0; i < m; i++)
rotate_1col(n, source[i], z);
}
int main(void)
{
int m = 3;
for (int n = 2; n < 9; n++)
{
int source[m][n];
for (int z = 0; z <= n; z++)
{
init_matrix(m, n, source);
printf("Initial:\n");
dump_matrix(m, n, source);
rotate_cols(m, n, source, z);
printf("Post-rotate %d:\n", z);
dump_matrix(m, n, source);
putchar('\n');
}
}
return 0;
}
该代码演示了不同大小的数组上不同大小的旋转。输出的示例部分:
…
Initial:
2 3 4
4 6 8
6 9 12
Post-rotate 1:
4 2 3
8 4 6
12 6 9
…
Initial:
2 3 4 5
4 6 8 10
6 9 12 15
Post-rotate 3:
3 4 5 2
6 8 10 4
9 12 15 6
…
Initial:
2 3 4 5 6 7
4 6 8 10 12 14
6 9 12 15 18 21
Post-rotate 1:
7 2 3 4 5 6
14 4 6 8 10 12
21 6 9 12 15 18
Initial:
2 3 4 5 6 7
4 6 8 10 12 14
6 9 12 15 18 21
Post-rotate 2:
6 7 2 3 4 5
12 14 4 6 8 10
18 21 6 9 12 15
Initial:
2 3 4 5 6 7
4 6 8 10 12 14
6 9 12 15 18 21
Post-rotate 3:
5 6 7 2 3 4
10 12 14 4 6 8
15 18 21 6 9 12
…
Initial:
2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
6 9 12 15 18 21 24 27
Post-rotate 4:
6 7 8 9 2 3 4 5
12 14 16 18 4 6 8 10
18 21 24 27 6 9 12 15
Initial:
2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
6 9 12 15 18 21 24 27
Post-rotate 5:
5 6 7 8 9 2 3 4
10 12 14 16 18 4 6 8
15 18 21 24 27 6 9 12
Initial:
2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
6 9 12 15 18 21 24 27
Post-rotate 6:
4 5 6 7 8 9 2 3
8 10 12 14 16 18 4 6
12 15 18 21 24 27 6 9
…
关于c - 如何理解这些将数组中的 (a1 a2...am b1 b2..bn ) 重新排列为(b1 b2 ..bn a1 a2..am) 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38439713/
我在计算这个特定程序的递归时遇到了一些麻烦。我尝试了几种不同的选择,但我对递归函数是全新的。我唯一可以修改的程序部分是在函数 B 的内部。此函数计算:Bn(a) = Bn−1(a) × Bn−2(a)
今天遇到一个问题,很迷惑 问题 我有这样的数组:arr[a1, a2, a3....an, b1, b2, b3.....bn],如何移动数组的元素将它转移到arr[a1, b1, a2, b2...
假设我有这个 git 结构: * hash3 (HEAD -> origin/bN, bN) Message N | * ... | * hash2 (origin/b2, b2) Message 2
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
最近看了破解代码,在第二章介绍了runner方法解决多数链表问题。 给定一个链表 a1 a2...an b1 b2...bn 重新排列为 a1 b1 a2 b2...an bn。 它说我们应该使用两个
在 truffle 控制台中,我正在执行以下语句, result = token.balanceOf(accounts[1]) 此语句返回以下输出。 按照建议here ,我正在尝试使用 toNumb
使用 :bn 切换缓冲区时,如何将光标位置保留在一行内例如? vim 记得我的光标在哪一行,但是当我在缓冲区之间切换时总是将我的光标移动到行的开头。 最佳答案 我不知道为什么 Vim 会这样,但幸运的
我有一段我无法理解的c#代码。在 IntToBin 循环的第一次迭代中,我了解到移位运算符将其转换为字节值 7,但在第二次传递时,字节值为 224。224 是如何实现的。 static void
当我使用 truffle 开发智能合约时,每当从 truffle 控制台请求账户余额或地址等数字时;我收到一个看起来像这样的 BN 对象: BN { negative: 0, words: [
如果我用多个文件启动 vim,像这样 vim *.java , 我可以使用 :n 循环浏览打开的文件或 :bn (和其他相关命令)。 但是如果我只从一个文件开始并使用 :split 加载其他文件(稍后
我想知道在使用多 GPU 进行训练时通过同步批量统计信息来实现批量标准化层的可能方法。 咖啡 也许有一些咖啡的变体可以做到,比如 link .但是对于BN层,我的理解是它仍然只同步层的输出,而不是me
#include #include 错误:无法打开源文件“openssl/bn.h”,无法打开源文件“openssl/dh.h”???怎么了 最佳答案 确保您的系统上安装了 libssl。如果你在
如果我们要 Conv2d 后跟 ReLU 后跟 batch norm (bn )? 如果我们先是 Conv2d 然后是 bn 然后是 ReLU 就没必要了,因为 bn ReLU -> BatchNor
有一个简单的可靠契约: contract SellStuff{ address seller; string name; string description; uin
我正在尝试这样做: import { BN } from 'web3-utils' const AmountBN = new BN('1000000000000000000')
我为我的应用程序使用了 webpack 4。不知何故,bn.js 包在生产构建中占用了很多。 图像显示它占用了 594.22 KB 的数据。有没有办法为所有依赖于 bn.js 的包创建一个 bn.js
webpack-bundle-analyzer 显示我的vendor.js 中包含的 elliptic 和 bn.js但这些模块未在代码中使用或包含在 package.json 中。 npm ls b
OpenSSL 是否支持使用 BN API 在二次扩展域中进行运算(或者,复数运算)? 如果没有,是否还有其他开源库可以? 最佳答案 你可能想看看PBC .这是一个用于计算某些椭圆曲线上的配对的库,这
我是 Obj-C 的新手,正在尝试编译 Big Number 相关的 Objective C 文件 函数很简单,就是初始化一个大数然后用NSLog打印出来。 我用过 #import 但是 xcode
我试图在包 bnlearn 的 bn.fit 函数中理解 bayes 和 mle 这两种方法之间的区别。 我知道频率论者和贝叶斯方法之间关于理解概率的争论。在理论层面上,我认为最大似然估计 mle 是
我是一名优秀的程序员,十分优秀!