Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาบิตที่ k ในสตริงไบนารีที่สร้างโดยสลับการทำงานซ้ำๆ และผนวกการดำเนินการใน C++


สมมติว่าเรามีสตริงไบนารี s เริ่มแรกนี่คือ "0" ในการวนซ้ำแต่ละครั้งจะกลับด้านและต่อท้าย ดังนั้นหลังจากการวนซ้ำครั้งที่ n เราจะพบบิตที่ k สมมติว่าจำนวนการวนซ้ำคือ 4 และ k =7 ดังนั้นจะเป็น −

การวนซ้ำ ค่า (เริ่มต้น 0)
1 01
2 0110
3 01101001
4 0110100110010110

ดังนั้น 7 th บิตคือ 1

ในการวนซ้ำแต่ละครั้ง ค้นหาส่วนเติมเต็ม และต่อท้าย ดังนั้นหลังจากการวนซ้ำครั้งที่ n จะพบบิตที่ k

ตัวอย่าง

#include<iostream>
using namespace std;
string getComplement(string bin){
   string temp = "";
   for(int i= 0; i<bin.length(); i++){
      if(bin[i] == '0')
         temp += "1";
      else
         temp += "0";
   }
   return temp;
}
char getCharacter(string bin_str, int n, int k) {
   string res = bin_str;
   for(int i = 0; i<n; i++){
      res += getComplement(res);
   }
   return res[k];
}
int main() {
   int n = 4;
   string bin = "0";
   cout << 7 << "th character is: "<< getCharacter(bin, n, 7);
}

ผลลัพธ์

7th character is: 1