Fancy Phone Number คืออะไร?
เบอร์โทร 10 หลัก ที่ตรงตามเงื่อนไขอย่างน้อย 1 ข้อจาก 3 ข้อ:
- 3 ตัวเลขติดกันเหมือนกัน เช่น 555, 7777
- 3 ตัวเลขติดกันเรียงลำดับ เพิ่มหรือลด เช่น 123, 456, 321, 987
- ตัวเลขใดตัวเลขหนึ่งปรากฏ 4 ครั้งขึ้นไป ในเบอร์ทั้งหมด เช่น 8965499259 (มี 9 อยู่ 4 ครั้ง)
ตัวอย่าง
9859009976 → มี 9 อยู่ 4 ครั้ง (ตำแหน่ง 1, 3, 7, 8) → Fancy ✓
อัลกอริทึม
- รับ input เป็น string (10 ตัวอักษร)
- ตรวจสอบเงื่อนไข 1: วน i=0..7 ถ้า s[i]==s[i+1]==s[i+2] → true
- ตรวจสอบเงื่อนไข 2: วน i=0..7 ถ้า s[i],s[i+1],s[i+2] เพิ่ม/ลดทีละ 1 → true
- ตรวจสอบเงื่อนไข 3: นับ frequency แต่ละตัวเลข ถ้ามี ≥ 4 → true
- รวมผลด้วย OR
ตัวอย่างโค้ด C++
#include <iostream>
#include <string>
#include <array>
using namespace std;
bool hasThreeConsecutiveSame(const string& s) {
for (int i = 0; i + 2 < s.size(); i++) {
if (s[i] == s[i+1] && s[i+1] == s[i+2])
return true;
}
return false;
}
bool hasThreeConsecutiveSeq(const string& s) {
for (int i = 0; i + 2 < s.size(); i++) {
int a = s[i] - '0', b = s[i+1] - '0', c = s[i+2] - '0';
if ((a + 1 == b && b + 1 == c) || (a - 1 == b && b - 1 == c))
return true;
}
return false;
}
bool hasDigitFourTimes(const string& s) {
array freq = {0};
for (char c : s) freq[c - '0']++;
for (int f : freq) if (f >= 4) return true;
return false;
}
bool isFancyNumber(const string& s) {
return hasThreeConsecutiveSame(s)
|| hasThreeConsecutiveSeq(s)
|| hasDigitFourTimes(s);
}
int main() {
string numbers[] = {
"7609438921", // มี 9 4 ครั้ง? นับดู: 7,6,0,9,4,3,8,9,2,1 → 9 แค่ 2 ครั้ง
"9859009976", // 9: pos 0,2,6,7 = 4 ครั้ง ✓
"1234567890", // 123, 234, ... ✓
"1112223333", // 111, 222, 333, 3×4 ✓
"1212121212" // ไม่มี 3 ติด, ไม่มี 4 ครั้ง
};
for (const string& num : numbers) {
cout << num << ": " << (isFancyNumber(num) ? "FANCY" : "Not fancy") << endl;
}
return 0;
}
ผลลัพธ์
7609438921: Not fancy 9859009976: FANCY 1234567890: FANCY 1112223333: FANCY 1212121212: Not fancy
หมายเหตุ
ตัวอย่างในโจทย์เดิม "7609438921" บอกว่าเป็น Fancy แต่จากการนับ 9 มีแค่ 2 ครั้ง (ตำแหน่ง 3 และ 7) อาจมี typo ในตัวอย่างต้นฉบับ โค้ดข้างต้นตรวจสอบอย่างถูกต้องตามเงื่อนไข 3 ข้อ