我必须编写一个程序来显示一些格雷码编码的数字。我已经在此页面中找到了用 C++ 编写的算法(https://www.geeksforgeeks.org/given-a-number-n-generate-bit-patterns-from-0-to-2n-1-so-that-连续模式不同一位/)。
但是我想创建一种新方法来删除连续有两个“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++ 编写的格雷码中,或者也许有一种方法可以在不使用向量的情况下比较此代码中的两个数字。