Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 그레이 코드


그레이 코드는 두 개의 연속 값이 한 비트만 다른 이진수 시스템이라는 것을 알고 있습니다. 코드의 총 비트 수를 나타내는 음이 아닌 정수 n이 있다고 가정합니다. 그레이 코드 시퀀스를 인쇄해야 합니다. 그레이 코드 시퀀스는 0으로 시작해야 합니다. 따라서 입력이 2이면 결과는 [0,1,3,2]가 됩니다. 이는 0의 회색은 00, 1의 회색은 01, 2의 회색은 11이고 3의 회색은 10입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 배열 하나 만들기
  • 각 숫자에 대한 회색 코드를 찾아 배열로 추가합니다.
  • 회색으로 변환하기 위해 숫자를 가져와서 숫자를 오른쪽으로 1비트 이동한 후 XOR을 수행합니다.

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> grayCode(int n) {
      vector <int> ans;
      for(int i =0; i<1<<n; i++){
         ans.push_back(i^(i>>1));
      }
      return ans;
   }
};
main(){
   Solution ob;
   print_vector(ob.grayCode(4));
}

입력

4

출력

[0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8, ]