- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
编辑:抱歉,这只是我在下面的代码中初始化时的错误。
const int kDigits = 7;
std::vector<int> number(kDigits);
for (int i = kDigits - 1; i >= 0; i--) {
number[i] = i + 1;
}
vector number
被初始化为 7, 6, 5, 4, 3, 2, 1
。
我的目标是以降序生成排列:7654321
7654312
7654231
7654213
7654132
此代码有效:
do {
...
}
while (std::prev_permutation(number.rbegin(), number.rend()));
但是,我不明白为什么。由于 7654321
是最大的字典顺序排列,不应该 while (std::prev_permutation(number.begin(), number.end()));
(没有反向迭代器) 正确生成它,因为它会按顺序生成 previous 排列?但是,这会在第一次尝试时返回 false,即使它应该生成“较低的排列”。
此外,在上面显示的代码中,由于它使用反向迭代器,我的想法将其解释为找到 1234567
的前一个排列(7654321
向后),这似乎我应该没有。
非常感谢您的提前帮助!我期待弄清楚我误解了什么/我遗漏了什么。
最佳答案
vector number
被初始化为1,2,3,4,5,6,7
,而不是7,6,5,4,3 ,2,1
。这就是您的代码有效的原因。
如果你想让它初始化为7,6,5,4,3,2,1
,你需要修复初始化例程。
关于C++:难以掌握 std::next_permutation 和 std::prev_permutation 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767458/
排列就是一次对对象序列或值序列的重新排列。例如,“ABC”中字符可能的排列是: "ABC", "ACB", "BAC", "BCA", "CAB", "CBA" 三个不同的字符有 6 种排列,这个数字
给定一个结构(例如): struct permutation_object { int index; string content; }; 以及这些结构的 vector : vecto
有什么方法可以通过在 C++ 中使用 next_permutation 来打印所有排列,而忽略已经以相反顺序出现的排列。例如,在它打印{1, 2, 3, 4} 之后,它不应该打印{4, 3, 2, 1
如果我有: bool shuffle(string s){ return next_permutation(s.begin(), s.end()); } int main(int argc,
我在对空终止字符数组使用 next_permutation 时遇到问题。当我在 do while 语句中登录时,它只给我开始的 charArray 的第一个字符,而不是给我所有可能排列的第一个字符。这
我想知道是否可以使用 OpenMP 并行化此代码。 OpenMP 会让代码运行得更快吗?有没有更好的方法来实现这一点? vector t; // already initialized do{
我正在尝试排列井字棋盘。所以我有以下代码: // 5 turns for x if x goes first std::string moves = "xxxxxoooo"; do { std
从一个范围内对象的可能随机排序开始是否更有效,使用 next_permutation 遍历所有更大的排列,然后降级,再次从原始排序开始,使用 prev_permutation 到达最后一个。 或者,在
我试图找到给定字符列表的所有排列,在本例中为“eta” std::string s="eta"; do { std::cout<
我正在为 next_permutation 函数使用自定义比较器函数,但我不明白为什么会出现错误: Expression: invalid operator 0)) || ((i > 0) && (j
我如何在 while 循环之外使用排列数字来进行比较。因为我已经检查过,while 外部的 vector 与之前定义的相同。 void display(vector vec){ for (in
使用这段代码时: for(int i=0; i
我有以下程序使用函数 next_permutation() 和输出: 8 int main () 9 { 10 int myints[] = {1, 2, 3}; 11 12 co
我正在尝试使用 OpenMP 并行化我自己的旅行商问题的 C++ 实现。 我有一个函数来计算道路成本 cost() 和 vector [0,1,2,...,N],其中 N 是道路的节点数。 在 mai
我正在尝试解决输入两个不同长度的 vector 并添加它们的标量积的问题。它是来自 https://code.google.com/codejam/contest/32016/dashboard#s=
我想知道是否有一种简单的方法可以知道 parity由 c++ 的 std::next_permutation 根据它们的创建顺序创建的排列的(签名)。 int main() { int cou
我有以下作业: 我们有 N 个作品,工期为:t1, t2, ..., tN,截止日期为 d1, d2, ..., dN。如果工程在截止日期之前没有完成,则相应地给予罚分 b1, b2, ..., bN
有没有办法“重置”std::next_permutation()?假设我想多次检查 vector 的排列。我唯一能找到的是交替地通过 next_permutation 和 prev_permutati
是否有一些等效的库或函数可以为我提供一组值的下一个组合,例如 next_permutation 对我有帮助吗? 最佳答案 组合:来自 Mark Nelson 关于同一主题的文章,我们有 next_co
以下程序缺少一个排列条目。 #include #include #include int main ( int argc, char **argv) { std::vector temp
我是一名优秀的程序员,十分优秀!