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

주어진 휴대폰 번호가 C++에서 멋진지 확인하십시오.

<시간/>

우리는 10자리 휴대폰 번호를 가지고 있으며, 우리의 임무는 그 번호가 공상 번호인지 확인하는 것입니다. 멋진 번호에는 세 가지 조건이 있습니다. 적어도 하나가 참이면 그 숫자는 환상적입니다. 이러한 조건은 다음과 같습니다 -

  • 555와 같이 단일 숫자가 세 번 연속으로 나타납니다.
  • 3개의 연속된 숫자는 123 또는 321과 같이 오름차순 또는 내림차순입니다.
  • 한 자리 숫자는 8965499259와 같이 숫자에서 4번 이상 나타납니다. 여기서는 9가 4번 나타납니다.

팬시넘버의 한 예로 9859009976을 들 수 있는데 세 번째 조건을 만족하는 팬시넘버입니다.

숫자를 문자열로 사용하고 조건 3의 경우 각 숫자의 빈도를 계산합니다. 여기서 해싱의 기본 개념이 사용됩니다.

예시

#include <iostream>
#define N 5
using namespace std;
bool consecutiveThreeSameDigits(string s) {
   for (int i = 0; i < s.size() - 2; i++) {
      if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
         return true;
   }
   return false;
}
bool incDecThree(string s) {
   for (int i = 0; i < s.size() - 2; i++) {
      if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) || (s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
      return true;
   }
   return false;
}
bool fourOccurrence(string s) {
   int freq[10];
   for(int i = 0; i < 10; i++)
      freq[i] = 0;
   for (int i = 0; i < s.size(); i++)
      freq[s[i] - '0']++;
   for (int i = 0; i < 9; i++)
      if (freq[i] >= 4)
         return true;
      return false;
}
bool isFancyNumber(string s) {
   if (consecutiveThreeSameDigits(s) || incDecThree(s) || fourOccurrence(s))
      return true;
   else
      return false;
}
int main() {
   string s = "7609438921";
   if (isFancyNumber(s))
      cout << "This is fancy number";
   else
      cout << "This is not a fancy number";
}

출력

This is fancy number