เรามีเบอร์มือถือ 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