草庐IT

排列去重

全部标签

c++ - C族语言if语句中2乘2条件的排列

在编程时,我通常会同时处理两组条件,例如:if(A&&B){...}elseif(!A&&B){...}elseif(A&&!B){...}elseif(!A&&!B){...}它也可以使用嵌套的if语句来解决。if(A){if(B){...}else{...}}else{if(B){...}else{...}}编辑:一些新的想法,如果A和B的评估都没有副作用?所以我的问题是它们之间有任何性能差异以及它们的可读性如何?如果重要的话,我会用C++编写代码。 最佳答案 这两种情况并不相同。在第二种情况下,A和B将分别被计算一次。在第一种

c++ - 哪个是迭代字符串排列的最佳数据结构?

比方说,我们有字符串“ABCAD”,现在我们需要在顺时针和逆时针方向上遍历该字符串的所有可能排列。我丑陋的实现看起来像这样:strings="ABCAD";stringt="";for(inti=0;i输出:阿绍HSAUA苏亚奥哈斯美国哈萨克斯坦大学美国航空安全协会阿修绍阿豪斯AUASH我知道这太天真了,AFAIK循环列表会是更好的选择,有人可以使用STL更有效地实现同样的事情吗? 最佳答案 在伪代码中,我会走这条路:functionrearrange(strings){stringt=s+s;for(inti=0;i可能有一种使用

c++ - 在数组中查找整数的有效分配(具有给定顺序的排列)

我在寻找一个好的算法来为不同数组中的某些整数生成每个可能的赋值时遇到一个普遍问题。假设我有n个数组和m个数字(我可以有比数字更多的数组,比数组更多的数字或与数字一样多的数组)。例如,我有数字1、2、3和三个数组:{}、{}、{}现在我想找到以下每个解决方案:{1,2,3},{},{}{},{1,2,3},{}{},{},{1,2,3}{1,2},{3},{}{1,2},{},{3}{},{1,2},{3}{1},{2,3},{}{1},{},{2,3}{},{1},{2,3}{1},{2},{3}所以基本上我想找到每个可能的组合,以将数字分配给不同的数组并保持顺序。所以在这个例子中,1

c++ - 按顺时针顺序排列坐标

我有9个屏幕坐标,每个坐标代表9个位置之一。从右上角开始,我希望该位置从第1个位置开始,接下来的顺时针坐标表示第2、3、4等,直到第9个位置,这将是左上角的坐标。这里有人能想出某种数学方法来确定9个坐标中的哪个坐标位于哪个位置吗?它们都是相互关联的,并且永远是相互关联的。示例坐标可以是:(x,y)XY663382543454303454183382418459543209303209653259183259绘制成类似这样的图像:有人有什么想法吗?我只是想要某种形式的编程方式按顺时针顺序列出这些坐标... 最佳答案 找到“圆”的中心,

c++ - 通过多线程程序 (C++) 打印 {0, 1, 2, 3} 的排列

我想打印一个由用C++11编写的多线程程序设置的{0,1,2,3}的排列。源码是这样的:#include#include#include#include#includeusingnamespacestd;voidfunc(intindex);intmain(){vectorthreads;for(inti=0;i我希望输出0123的排列,但我收到奇怪的结果,如下所示:022301330124我不明白这种奇怪的行为,尤其是我无法解释数字4的存在。这可能是初学者的错误,我还是感谢大家帮助我。 最佳答案 您正在通过引用捕获i:autova

c++ - 用特征随机排列矩阵的行/列

我正在使用Eigen并且我有一个矩阵:MatrixXix=MatrixXi::Random(5);我想使用随机绘制的排列(行和列只有一个排列)随机排列行和列,即如果我有一个发送索引[0,1,2,3,4]->[3,4,2,1,0]比我想用相同的排列对行和列重新排序。第1部分:我无法在网上找到PermutationMatrix的示例,而且我在理解语法方面遇到了麻烦。第2部分:如何获取随机置换的索引vector以传递给它?也许是std::random_shuffle?更新:这是一种(可能效率低下的)方法来获得一组打乱的索引:std::vectorperm;for(inti=0;i所以现在的问

c++ - 按大写字母顺序排列字符串 C++

我试图用C++创建一个程序,以大写字母在其对应的小写字母之前的方式按字母顺序对给定字符串进行排序。例子:DCBA排序字符串:AaBbCcDd下面是代码。#include#include#includestructchar_{charc;chardiff;char_();char_(charx);};char_::char_(){c=0;diff=0;}char_::char_(charx){c=std::tolower(x);diff=c-x;}voidcharswap(char_&x,char_&y){char_temp;temp=x;x=y;y=temp;}intmain(){st

c++ - 随机排列中第 n 项的高效计算

想象一下,我能够使用诸如Knuth洗牌之类的方法和使用key播种的种子随机数生成器来洗牌0到2^32之间的所有数字。从概念上讲,我需要两个数组(使用Z5而不是Z232为简洁起见):[2,0,1,4,3]//perm[1,2,0,4,3]//inv===p^-1如果我有这些数组,我可以高效地查找排列中的第n个元素,并找出purmutation值v中的元素;v=perm[n];n==inv[v];//true我不想存储两个16GB的uint数组来表示这个打乱后的集合,因为我对整个打乱后的序列在任何时候都不感兴趣。我只对第n个元素的值感兴趣。理想情况下,我想编写两个像这样工作的纯函数:uin

c++ - 用 uint8_t 或 char 来表示按字节排列的二进制数据哪个更好?

我喜欢uint8_t,因为我觉得它的意图(二进制数据,而不是字符)表达得更好。但是,有许多我可能想要调用的基于字符的I/O函数。只是想知道是否有人们遵守的最佳实践?这是我第一次涉足字节级I/O。 最佳答案 char的问题是它可能是有符号类型(范围至少为-127..+127)或无符号类型(范围至少为0..255)。unsignedchar比普通的好char用于面向二进制字节的数据。uint8_t,如果存在,将具有与unsignedchar相同的范围和表示形式,并且可能只是同一类型的另一个名称。请注意,C++(如C)将字节定义为给定系统

c++ - 如何在不使用递归的情况下找到字符串的所有排列?

谁能帮我解决这个问题:这是一个查找任意长度字符串的所有排列的程序。需要相同的非递归形式。(最好是C语言实现)usingnamespacestd;stringswtch(stringtopermute,intx,inty){stringnewstring=topermute;newstring[x]=newstring[y];newstring[y]=topermute[x];//avoidstempvariablereturnnewstring;}voidpermute(stringtopermute,intplace){if(place==topermute.length()-1){