Semak jika diberi dua nombor boleh dibuat sama dengan menukar 1 atau 2 bit dalam C++

WBOY
Lepaskan: 2023-08-25 17:57:10
ke hadapan
1103 orang telah melayarinya

Semak jika diberi dua nombor boleh dibuat sama dengan menukar 1 atau 2 bit dalam C++

Dalam bidang pengaturcaraan komputer, banyak operasi berkisar pada nilai berangka. Dalam sesetengah kes, kita mungkin perlu menentukan sama ada dua nombor boleh dibuat sama dengan mengubah suai beberapa bit. Walaupun masalah ini boleh mendatangkan cabaran, strategi yang betul akan membawa kepada penyelesaian yang berjaya.

Tatabahasa

Untuk membina asas yang kukuh bagi pemahaman yang mendalam tentang algoritma, mari kita mula-mula membiasakan diri dengan sintaks yang digunakan dalam pengekodan seterusnya dengan menggunakan pendekatan khusus ini.

bool checkEquality(int num1, int num2);
Salin selepas log masuk

Hasilkan tindak balas boolean dengan menggunakan fungsi checkEquality untuk menentukan sama ada dua integer num1 dan num2 yang diberikan boleh dijadikan sama dengan menukar hanya satu atau dua bit.

Algoritma

Berikut ialah pecahan langkah demi langkah algoritma kami:

  • Tentukan keputusan XOR bagi num1 dan num2 dan tetapkan output kepada xorResult pembolehubah baharu.

  • Gunakan algoritma untuk mengira bilangan bit set dalam xorResult dan tetapkan hasilnya kepada pembolehubah yang dipanggil setBitCount.

  • Untuk operasi berjaya, setBitCount tidak boleh melebihi 2. Dalam kes ini, fungsi kami akan mengembalikan hasil yang benar. Jika ambang yang ditentukan ini melebihi, kita boleh membuat kesimpulan bahawa output kita mestilah palsu.

  • Sekarang kita mempunyai algoritma, mari kita menyelami sekurang-kurangnya dua cara berbeza untuk menyelesaikan masalah ini.

Kaedah 1: Operasi bit

Dalam kaedah ini kita akan menggunakan operasi bit untuk menyemak sama ada nombor boleh dibuat sama.

Contoh

#include <iostream>

bool checkEquality(int num1, int num2) {
   int xorResult = num1 ^ num2;
   int bitCheck = xorResult & (xorResult - 1);
   return (bitCheck == 0);
}

int main() {
   int number1, number2;
   std::cout << "Enter the first number: ";
   std::cin >> number1;
   std::cout << "Enter the second number: ";
   std::cin >> number2;
    
   bool result = checkEquality(number1, number2);
   if (result) {
      std::cout << "It is possible to make the numbers equal by changing only one or two bits." << std::endl;
   } else {
      std::cout << "It is not possible to make the numbers equal by changing only one or two bits." << std::endl;
   }  
   return 0;
}
Salin selepas log masuk

Output

Enter the first number: Enter the second number: It is not possible to make the numbers equal by changing only one or two bits.
Salin selepas log masuk
Salin selepas log masuk

Penjelasan

Dengan mengubah suai nilai satu atau dua bit, kod C++ melakukan semakan mudah untuk menentukan sama ada penjajaran sempurna antara dua nilai yang dibekalkan boleh diwujudkan semasa pemprosesan. Untuk mencapai matlamat ini, bahagian penting kod adalah untuk menentukan fungsi khas yang dipanggil "checkEquality". Menggunakan fungsi tersuai ini memerlukan penyediaan dua pembolehubah integer sebagai input. Jenis output fungsi tertentu ini menggunakan logik Boolean supaya pengguna boleh mendapatkan hasil dengan mudah yang menunjukkan sama ada argumen yang dibekalkan kepada fungsi pada masa jalan adalah mencukupi untuk penjajaran berangka yang sempurna.

Untuk tujuan pengiraan, program ini menggunakan algoritma XOR untuk membandingkan input integer di atas melalui kaedah checkEquality. Selepas itu, hasil yang disimpan secara automatik ditangkap dalam pembolehubah "xorResult". Elemen utama dalam langkah seterusnya ialah mengira hasil bitwise DAN perantaraan antara xorResult dan XORResult - 1. Pada peringkat ini, apabila nilai pulangan ialah "0", andaian pembolehubah bitCheck menjadi perlu. Kerana ia menunjukkan bahawa syarat yang diperlukan dipenuhi, kita boleh menganggap bahawa satu atau dua bit dalam input integer perlu diubah untuk memenuhi permintaan yang dibuat oleh fungsi checkEquality. Setelah selesai, program menggesa pengguna untuk input, sebelum menghantar parameter ke dalam kaedah checkEquality sebagai peringkat pengiraan akhir. Selepas proses tamat, mesej output menunjukkan kehadiran/ketiadaan perubahan tahap bit yang diperlukan dan mesej yang sepadan dipaparkan dalam output konsol. Pelaksanaan ini menunjukkan contoh terbaik manipulasi bitwise dan penggunaan XOR, daripada C++.

Kaedah 2: Kaedah jarak Hamming

Dalam kaedah ini, kita akan menggunakan konsep jarak Hamming untuk menyelesaikan masalah.

Contoh

#include <iostream>

int countSetBits(int num) {
   int count = 0;
   while (num) {
      num &= (num - 1);
      count++;
   }
   return count;
}

bool checkEquality(int num1, int num2) {
   int xorResult = num1 ^ num2;
   int setBitCount = countSetBits(xorResult);
   return (setBitCount <= 2);
}

int main() {
   int number1, number2;
   std::cout << "Enter the first number: ";
   std::cin >> number1;
   std::cout << "Enter the second number: ";
   std::cin >> number2;
    
   bool result = checkEquality(number1, number2);
   if (result) {
      std::cout << "It is possible to make the numbers equal by changing only one or two bits." << std::endl;
   } else {
      std::cout << "It is not possible to make the numbers equal by changing only one or two bits." << std::endl;
   }   
   return 0;
}
Salin selepas log masuk

Output

Enter the first number: Enter the second number: It is not possible to make the numbers equal by changing only one or two bits.
Salin selepas log masuk
Salin selepas log masuk

Penjelasan

Dalam contoh ini kami menyediakan program C++ yang direka bentuk untuk menentukan sama ada kami boleh membuat perubahan kepada satu atau mungkin dua bit untuk menjadikan dua nombor berbeza setara. Selain itu, terdapat fungsi yang dipanggil "countSetBits" yang menggunakan algoritma Kemighan untuk menentukan bilangan bit set yang terdapat dalam nilai integer.

Dalam fungsi checkEquality, kod mengira OR eksklusif daripada dua nombor input dan menyimpan hasilnya dalam xorResult. Pernyataan sebelumnya mencetuskan fungsi countSetBits untuk menentukan bilangan bit yang ditetapkan dalam xorResult, yang kemudiannya terkumpul dalam setBitCount. Apabila setBitCount ditentukan sebagai dua atau kurang, ini bermakna hanya satu atau dua bit perlu diubah suai untuk mencapai keseimbangan, menyebabkan fungsi kembali benar. Jika tidak, pulangkan palsu.

Dalam fungsi utama, program menggesa pengguna memasukkan dua nombor. Ia kemudian memanggil fungsi checkEquality menggunakan nombor yang dibekalkan pengguna dan menyimpan hasilnya. Akhir sekali, bergantung pada nilai hasil, atur cara mencetak mesej yang sesuai yang menunjukkan sama ada adalah mungkin untuk membuat nombor sama dengan menukar satu atau dua bit.

Kod ini menyediakan pelaksanaan masalah yang jelas, menggunakan operasi XOR dan algoritma Kernighan untuk mengira bit yang ditetapkan dengan cekap.

Kesimpulan

Artikel kami membincangkan masalah menentukan sama ada dua nombor yang diberikan boleh sama manakala hanya menukar satu atau dua bit. Untuk menyelesaikan masalah ini, kami mencadangkan dua kaedah yang berkesan - kaedah operasi bit dan kaedah jarak Hamming. Kedua-dua kaedah menyediakan penyelesaian yang cekap. Kami juga menyediakan contoh kod boleh laku sebenar berdasarkan kaedah ini. Dengan memahami dan melaksanakan kaedah ini, anda boleh menyemak dengan berkesan sama ada dua nombor boleh dibuat sama dengan menukar beberapa bit.

Atas ialah kandungan terperinci Semak jika diberi dua nombor boleh dibuat sama dengan menukar 1 atau 2 bit dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan