gpt4 book ai didi

c++ - 选择一些用格雷码编码的数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:14 24 4
gpt4 key购买 nike

我必须编写一个程序来显示一些用格雷码编码的数字。我已经在此页面 ( 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 并显示列表中的其他号码。

我的想法是创建一个 vector 的 vector 。例如,当 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++ 编写的格雷码的结果存储在我的 vector 中,或者也许有一种方法可以在不使用 vector 的情况下比较这段代码中的两个数字。

最佳答案

当您使用更大的字符串时,这将是额外的工作,并且代码阅读起来并不容易。如何创建一个简单的面具?将一对连续的 1 位移动数字的长度 (num)。

mask = 0b11000      // fill in the correct quantity of 0s
end_mask = 0b10001

while mask > 1
if (num && mask) == mask
remove num from array
mask = mask >> 1

if num && end_mask == end_mask
remove num from array

关于c++ - 选择一些用格雷码编码的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48000038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com