Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

C++ เลขแพนดิจิตอล (Pandigital Number) ในฐานที่กำหนด


ตัวเลขที่ประกอบด้วยตัวเลขทั้งหมดจาก 0 ถึงฐาน B เรียกว่าเลขแพนดิจิตอล (Pandigital Number) ในฐานนั้น แต่บางตัวเลขมีตัวเลขจาก 1 ถึง 9 เรียกว่า Zero-less Pandigital Numbers ตัวอย่างของเลขแพนดิจิตอลคือ 0123456789, 0789564312 ฯลฯ

ในบทช่วยสอนนี้ เราจะอภิบัติปัญหาที่เราได้รับตัวเลขและฐาน และต้องตรวจสอบว่าตัวเลขนั้นเป็นแพนดิจิตอลในฐานที่กำหนดหรือไม่ เช่น

Input: num = "9651723467380AZ", base = 10 Output: YES Explanation: num มีตัวเลขครบทุกตัวในฐาน 10 คือ 0 ถึง 9 จึงเป็นแพนดิจิตอล
Input: num = "130264ABCDE745789", base = 16 Output: NO Explanation: num ไม่มี F(15) ซึ่งอยู่ในฐาน 16 คือ 0 ถึง 15 จึงไม่ใช่แพนดิจิตอล

วิธีการแก้ปัญหา

เพื่อแก้ปัญหานี้ เราจะใช้ Set และแทรกตัวเลขแต่ละตัวลงใน Set เพราะเราต้องเก็บค่าที่ไม่ซ้ำกัน

  • วนลูปผ่านสตริง รับตัวอักษรแต่ละตัวทีละตัว
  • ตรวจสอบว่าสมาชิกเป็นตัวเลขหรือตัวอักษร
  • ถ้าเป็นตัวอักษร ให้บวก 10 เข้ากับตำแหน่งในอัลฟาเบตเพื่อแทนค่าสองหลัก
  • เก็บค่าใน Set
  • หลังจบการวนลูป ตรวจสอบว่าขนาดของ Set เท่ากับฐานหรือไม่

ตัวอย่าง

โค้ด C++ สำหรับวิธีการข้างต้น

#include<bits/stdc++.h> 
using namespace std; 

int main(){ 
    int base = 10; 
    char n[] = "9651723467380AZ"; 
    set<int, greater<int> > s; 
    for (int i = 0; i < strlen(n); i++){ 
        if (n[i] >= '0' && n[i] <= '9') 
            s.insert(n[i]- '0'); 
        else if (n[i] - 'A' <= base - 11) 
            s.insert(n[i] - 'A' + 10); 
    } 
    if(s.size()==base) cout<< "YES"; 
    else cout<< "NO"; 
    return 0; 
}

ผลลัพธ์

YES

สรุป

ในบทช่วยสอนนี้ เราอภิบัติปัญหาที่เราได้รับตัวเลขและฐาน ต้องตรวจสอบว่าตัวเลขเป็นแพนดิจิตอลหรือไม่ เราอภิบัติวิธีง่ายในการแก้ปัญหานี้โดยการแทรกค่าใน Set และตรวจสอบขนาดกับฐาน เรายังอภิบัติโปรแกรม C++ สำหรับปัญหานี้ ซึ่งสามารถทำได้กับภาษาอื่น เช่น C, Java, Python ฯลฯ หวังว่าจะเป็นประโยชน์