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

C++에서 문자열에 있는 문자의 프라임 주파수 XOR


이 문제에서는 일련의 문자가 주어지며, 우리의 임무는 발생 빈도가 소수인 문자열의 문자 빈도의 XOR을 인쇄하는 것입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 − 튜토리얼 포인트

출력 -

여기서는 문자열의 각 문자의 발생 빈도를 확인한 다음 빈도가 소수인 모든 문자의 XOR을 찾습니다. 이를 위해 프라임 주파수 배열이 생성됩니다. 그런 다음 문자열의 문자 빈도를 맵에 저장한 다음 프라임 빈도 배열과 일치시킵니다. 일치하는 항목이 발견되면 xor가 발견되면 맵의 모든 요소를 ​​반복할 때 필요한 XOR을 찾을 수 있습니다.

솔루션 구현을 보여주는 프로그램,

#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;
}

출력

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