Computer >> Máy Tính >  >> Lập trình >> C ++

XOR của Tần số nguyên tố của các ký tự trong một chuỗi trong C ++


Trong bài toán này, chúng ta được cung cấp một chuỗi ký tự, nhiệm vụ của chúng ta là in ra XOR tần số của các ký tự trong chuỗi có tần suất xuất hiện là một số nguyên tố.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào - TutorialsPoint

Đầu ra -

Ở đây, chúng ta sẽ kiểm tra tần suất xuất hiện của từng ký tự của chuỗi và sau đó tìm XOR của tất cả các ký tự có tần suất là số nguyên tố. Đối với điều này sẽ tạo ra một mảng các tần số nguyên tố. Sau đó, chúng tôi sẽ lưu trữ tần số của các ký tự của một chuỗi trong một bản đồ và sau đó khớp với mảng tần số nguyên tố. Nếu tìm thấy kết quả khớp thì xor được tìm thấy, khi lặp lại với tất cả các phần tử của bản đồ, chúng tôi có thể tìm thấy các XOR được yêu cầu.

Ví dụ

Chương trình cho thấy việc triển khai giải pháp của chúng tôi,

#include <bits/stdc++.h>
using namespace std;
void findPrimes(bool prime[], int p_size){
   prime[0] = false;
   prime[1] = false;
   for (int p = 2; p * p <= p_size; p++) {
      if (prime[p]) {
         for (int i = p * 2; i <= p_size; i += p)
            prime[i] = false;
      }
   }
}
int findPrimeXOR(string s){
   bool prime[100005];
   memset(prime, true, sizeof(prime));
   findPrimes(prime, 10005);
   int i, j;
   map<char, int> charFreq;
   for (i = 0; i < s.length(); i++)
      charFreq[s[i]]++;
   int result = 0;
   int flag = 0;
   for (auto i = charFreq.begin(); i != charFreq.end(); i++) {
      if (prime[i->second]) {
         result = result ^ i->second;
         flag = 1;
      }
   }
   if (!flag)
      return -1;
   return result;
}
int main(){
   string s = "tutorialspoint";
   cout<<"The XOR of frequencies of character which have prime frequencies is : ";
   cout<<findPrimeXOR(s);
   return 0;
}

Đầu ra

The XOR of frequencies of character which have prime frequencies is : 3