作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个置换数组的函数。
但是,每当 offset
大于零时,其中一个元素不会被 A[i]
替换,我只剩下默认值初始化值。我似乎无法弄清楚问题出在哪里。代码中的fill
和print
函数只是用随机元素填充数组并打印数组的函数。
#include <iostream>
#include "print.h"
#include "random.h"
#include <memory>
int* permute_by_cycle(int A[], int size)
{
int dest;
int* C = new int[size];
int last = size - 1;
int offset = random(0, last);
std::cout << "offset = " << offset << std::endl;
for(int i = 0; i < size; i++) {
dest = i + offset;
//std::cout << "dest = " << dest << "\tlast = " << last << std::endl;
if(dest > last)
dest -= last;
C[dest] = A[i];
}
return C;
}
int main()
{
int size = 18;
int A[size];
//int* B = new int[size];
fill(A,size);
print(A,size);
int* B = permute_by_cycle(A, size);
print(B,size);
delete [] B;
return 0;
}
输出:
41 65 31 41 19 15 72 11 78 69 37 23 29 63 75 4 5 49
offset = 16
0 31 41 19 15 72 11 78 69 37 23 29 63 75 4 5 49 65
最佳答案
替换
if(dest > last)
dest -= last;
与:
if(dest > last)
dest -= size;
您应该使用modulo
运算符来管理循环访问。我的首选版本是:
for(int i = 0; i < size; i++) {
C[(i+offset)%size] = A[i];
}
这样,您可以删除 dest
和所有关联的容易出错的行 :)
关于c++ - 循环排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897931/
给定一个向量 z = [1, 2, 3] ,我想创建一个所有循环排列为 z 的向量的向量(即 zp = [[1,2,3], [3,1,2], [2,3,1]] )。 我可以打印 zp 的所有元素和 f
我正在尝试编写一个置换数组的函数。 但是,每当 offset 大于零时,其中一个元素不会被 A[i] 替换,我只剩下默认值初始化值。我似乎无法弄清楚问题出在哪里。代码中的fill和print函数只是用
我是一名优秀的程序员,十分优秀!