【发布时间】:2018-06-08 13:30:02
【问题描述】:
我必须编写一个程序来显示一些格雷码编码的数字。我已经在这个页面 (https://www.geeksforgeeks.org/given-a-number-n-generate-bit-patterns-from-0-to-2n-1-so-that-successive-patterns-differ-by-one-bit/) 中找到了一个用 C++ 编写的算法。
但我想创建一个新方法来删除连续有两个“1”并且末端有“1”的数字(左和右)。
示例:对于 n = 3,我们得到这个数字:
000
001
011
010
110
111
101
100
现在我想删除这些数字:011、110、111、101,并在列表中显示其他数字。
我的想法是创建一个向量的向量。例如,当 n = 3 时:{{000},{001},{011},{010},{110},{111},{101},{100}}。
大小应该是这样的:
int m = pow(2,n);
int vector[m][n];
例如:vector[0][1] = {0} 和 vector[1][2] = {1} 如果我的尺寸是正确的。
现在要删除连续有两个“1”且末端有“1”的数字,我可以使用以下代码:
while (i < m){
for (j=0; j<n-1; j++){
if (vector[i][j]==vector[i][j+1]==1 && vector[i][0]==vector[i][n-1]==1 )
i=i+1; //Don't show this number
else { cout <<vector[i][j] << endl; i=i+1; }
}
}
现在的问题是我不知道如何将结果存储在我的向量中用 C++ 编写的格雷码中,或者也许有一种方法可以在不使用向量的情况下比较此代码中的两个数字。
【问题讨论】:
-
为什么这被标记为java和C++?哪种语言?在 C++ 中,
std::adjacent_find的使用使这变得微不足道。 -
我将删除 Java 代码。以及如何在用 C++ 编写的代码中使用 std::adjacent_find ?
-
那么您是否有一个向量向量,并且您想删除与您所说的标准匹配的向量?
-
是的,这个向量就是我要删除的数字。
标签: c++ algorithm vector gray-code