在 C++ 中檢查給定的手機號碼是否是花哨數字


我們有一個 10 位數字的手機號碼,我們的任務是檢查該號碼是否是花哨號碼。花哨號碼有三個不同的條件。如果至少滿足一個條件,則該號碼為花哨號碼。這些條件如下 -

  • 一個數字連續出現三次,例如 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

更新於: 2019 年 10 月 22 日

500 次瀏覽

開啟你的職業之旅

完成課程獲取認證

開始學習
廣告