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

การเปลี่ยนแปลงแบบวงกลมในการเป็นตัวแทนไบนารีใน C ++


สมมติว่าเรามี 2 จำนวนเต็ม n และเริ่มต้น งานของเราคือส่งคืนการเรียงสับเปลี่ยน p ของ (0,1,2.....,2^n -1) ดังนี้ −

  • p[0] =เริ่ม
  • p[i] และ p[i+1] ต่างกันเพียงบิตเดียวในการแทนค่าไบนารี
  • p[0] และ p[2^n -1] จะต้องแตกต่างกันเพียงบิตเดียวในการแทนค่าไบนารี่

ดังนั้นหากอินพุตเป็นเหมือน n =2 และ start =3 ดังนั้นอาร์เรย์ที่ส่งคืนจะเป็น [3,2,0,1] สิ่งเหล่านี้คือ [11,10,00,01]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • คืออาร์เรย์
  • สำหรับฉันอยู่ในช่วง 0 ถึง 2^n
    • แทรก XOR i XOR i/2 ลงใน ans
  • คืนสินค้า

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include ใช้เนมสเปซ std;void print_vector(vector v){ cout <<"["; for(int i =0; i circularPermutation(int n, int start) { vector  ans; for(int i =0; i <1<>1)); } ส่งคืน ans; }};main(){ โซลูชัน ob; print_vector(ob.circularPermutation(5,3));}

อินพุต

53

ผลลัพธ์

<ก่อนหน้า>[3, 2, 0, 1, 5, 4, 6, 7, 15, 14, 12, 13, 9, 8, 10, 11, 27, 26, 24, 25, 29, 28, 30, 31, 23, 22, 20, 21, 17, 16, 18, 19, ]