ข้อสอบท้ายค่าย 1 ศูนย์ สอวน.กรุงเทพมหานคร ปี 2566 ข้อที่ 5
Problem
สรุปโจทย์
รับ String ที่มีแค่ตัวอักษรภาษาอังกฤษตัวพิมพ์ใหญ่มา จงหาตัวอักษรที่มี ASCII VALUE น้อยที่สุดและไม่มีตัวซ้ำใน String
สิ่งที่ต้องทำ
หาตัวอักษรที่น้อยที่สุดและไม่มีตัวซ้ำใน String
ตัวอย่าง
Input | Output |
---|---|
COMPUTER | C |
THANAKIT | K |
Prerequisites
- Arrays
- Strings
Solution
วิธีทำ
เราจะใช้ Array เก็บว่าตัวอักษรแต่ละตัวมีการปรากฏมาทั้งหมดกี่ครั้ง โดยจะใช้ ASCII VALUE ของแต่ละตัวแทน Index มาเก็บใส่ Array และตอนจบก็ไล่จาก 'A' - 'Z' เพื่อตรวจสอบว่าตัวอักษรใดที่ปรากฏมาเพียง 1 ครั้ง และมีค่าน้อยที่สุด
Code
posn1_66_bkk_p5.cpp
#include <stdio.h>
int main(){
char str[25];
scanf("%s", str);
// นับจำนวนการโผล่ตัวของตัวอักษรแต่ละตัว
int cnt[26] = {0};
for (int i = 0; str[i] != '\0'; i++) cnt[str[i] - 'A']++;
// loop แล้วหาตัวอักษรตัวแรกที่โผล่มาเพียงครั้งเดียว แล้วพิมพ์คำตอบออกมา
for (int i = 0; i < 26; i++) {
if (cnt[i] == 1) {
printf("%c", 'A' + i);
break;
}
}
}