คำอธิบายปัญหา
สมมติว่าเรามีสตริง s ที่ประกอบด้วยตัวอักษรและตัวเลข เราต้องหาความถี่ (Frequency) ของแต่ละตัวเลข (0-9) ที่ปรากฏในสตริงและแสดงผล
ตัวอย่าง
หากอินพุตเป็น s = "we85abc586wow236h69" ผลลัพธ์จะเป็น:
(Number 2, Freq 1) (Number 3, Freq 1) (Number 5, Freq 2) (Number 6, Freq 3) (Number 8, Freq 2) (Number 9, Freq 1)
ขั้นตอนการแก้ปัญหา
- สร้างอาร์เรย์ freq ขนาด 10 สำหรับตัวเลข 0-9 เริ่มต้นค่าเป็น 0
- วนลูปตรวจสอบทุกตัวอักษรในสตริง
- ถ้าตัวอักษรเป็นตัวเลข (ระหว่าง '0' ถึง '9') ให้เพิ่มค่า freq[s[i] - '0'] ขึ้น 1
- วนลูปแสดงผลเฉพาะตัวเลขที่มีความถี่มากกว่า 0
โค้ดตัวอย่าง
#include <stdio.h>
#include <string.h>
void solve(char *s) {
int freq[10] = {0};
for (int i = 0; i < strlen(s); i++) {
if (s[i] >= '0' && s[i] <= '9') {
freq[s[i] - '0']++;
}
}
for (int i = 0; i < 10; i++) {
if (freq[i] > 0)
printf("(Number %d, Freq %d)\n", i, freq[i]);
}
}
int main() {
char *s = "we85abc586wow236h69";
solve(s);
return 0;
}
อินพุต
"we85abc586wow236h69"
เอาต์พุต
(Number 2, Freq 1) (Number 3, Freq 1) (Number 5, Freq 2) (Number 6, Freq 3) (Number 8, Freq 2) (Number 9, Freq 1)