检查给定的手机号码是否适合C ++

我们有一个10位数字的手机号码,我们的任务是检查该号码是否为花式号码。奇特的号码有三种不同的条件。如果至少一个为真,则该数字为奇数。这些条件如下-

  • 一个数字连续出现3次,例如555

  • 三个连续的数字按递增或递减的顺序排列,例如123或321。

  • 一个数字在一个数字中出现四次或更多次,例如8965499259,这里的9已出现四次。

奇数的一个示例是9859009976,这是第三个条件满足时的奇数。

我们将数字作为字符串,对于条件三,计算每个数字的频率,此处使用哈希的基本概念。

示例

#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