作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须编写一个程序来显示一些用格雷码编码的数字。我已经在此页面 ( 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/
我是一名优秀的程序员,十分优秀!