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

จำนวนตัวอักษรที่มีค่า ASCII สามารถสร้างได้ด้วยตัวเลขของ N ใน C++


กำหนดตัวแปรแบบยาวที่มีจำนวนบวกเป็นอินพุต เป้าหมายคือการหาจำนวนตัวอักษรที่มีตัวเลขค่า ASCII อยู่ในตัวเลขของตัวเลข

เลือกตัวเลขสองหลักจากตัวเลขและจัดเรียงในลักษณะที่ทำให้เป็นค่า ASCII ของตัวอักษรภาษาอังกฤษ ค่า ASCII ของ A-Z เริ่มต้นที่ 65 ถึง 90 และค่า ASCII ของ a-z เริ่มต้นจาก 97 ถึง 122

จำนวนทั้งหมดที่จะเลือกจะเป็น 26+26=52

ให้เราเข้าใจด้วยตัวอย่าง

ตัวอย่าง

ป้อนข้อมูล - N_digits =163465

ผลลัพธ์ - จำนวนตัวอักษรที่ค่า ASCII ขึ้นได้ด้วยตัวเลข N คือ 2

คำอธิบาย - ค่า ASCII ที่มีอยู่ใน 163465 คือ 65 และ 66 เท่านั้น ดังนั้นจึงมีตัวอักษรเพียงสองตัวเท่านั้น

ป้อนข้อมูล - N_digits =902349

ผลลัพธ์ - จำนวนตัวอักษรที่ค่า ASCII ขึ้นได้ด้วยตัวเลข N คือ 2

คำอธิบาย - ค่า ASCII ที่มีอยู่ใน 902349 คือ 90 และ 99 เท่านั้น ดังนั้นจึงมีตัวอักษรเพียงสองตัวเท่านั้น

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในแนวทางนี้ ก่อนอื่นเราจะสร้างอาร์เรย์ความถี่ total[10] เพื่อจัดเก็บความถี่ของตัวเลขในตัวเลขอินพุต ตอนนี้ใช้แต่ละหมายเลข i ในช่วง 65 ถึง 90 และ 97 ถึง 122 แยกหลักของ i และค้นหาในอาร์เรย์ความถี่ หากตัวเลขทั้งหมดของ i มีอยู่ในอาร์เรย์ความถี่ (ผลรวม [ ตัวเลขปัจจุบัน] จะไม่เป็นศูนย์สำหรับตัวเลขทั้งหมด ) ให้นับการเพิ่มขึ้น

  • ป้อนข้อมูลแบบยาว N_digits เป็นอินพุต
  • การตรวจสอบฟังก์ชัน(int arr[], int val) ใช้อาร์เรย์ความถี่ arr[] และ val หมายเลข ASCII เป็นอินพุตและคืนค่าเป็น true หาก val สามารถสร้างจากตัวเลขใน arr[]
  • การใช้ลูปทำสำเนาอาร์เรย์ความถี่เป็นจำนวนรวม[10]
  • ตอนนี้ใช้ while loop แยกแต่ละหลักของ val แล้วค้นหาทั้งหมด[]
  • หากผลรวม[หลัก] เป็น 0 ให้คืนค่าเท็จ มิฉะนั้น ใช้และลดจำนวนลง 1
  • ลด val สำหรับ LSB ถัดไป
  • หากในขณะที่ดำเนินการอย่างเต็มที่ val สามารถสร้างได้จากตัวเลขทั้งหมด[] ดังนั้นให้คืนค่าเป็น true
  • ฟังก์ชัน ASCII_N(long long int N_digits) นำตัวเลขที่ป้อนเข้ามาและส่งคืนจำนวนตัวอักษรที่มีค่า ASCII สามารถสร้างได้ด้วยตัวเลขของ N
  • นับเริ่มต้นเป็น 0 และเริ่มต้นอาร์เรย์ความถี่ทั้งหมด [10] ด้วย 0
  • เติมอาร์เรย์ความถี่สำหรับตัวเลขใน N_digits โดยใช้ while loop แยก LSB เป็นค่า =N_digits % 10 และเพิ่มผลรวม [values] ทีละ 1
  • ลด N_digits ลง 10
  • ตอนนี้สำรวจตัวเลข ASCII ของตัวอักษรตั้งแต่ 97 ถึง 122 และ 65 ถึง 90 โดยใช้การวนซ้ำ
  • หากมีการตรวจสอบใดๆ (ผลรวม i) คืนค่า จริง ให้นับการเพิ่มขึ้น
  • ที่ส่วนท้ายของทั้งสอง for loops จะนับเป็นผลลัพธ์

ตัวอย่าง

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

bool check(int arr[], int val) {
   int total[10];
   for (int i = 0; i < 10; i++) {
      total[i] = arr[i];
   }
   while (val > 0) {
      int values = val % 10;
      if (total[values] == 0) {
         return false;
      } else {
         total[values]--;
      }
      val = floor(val / 10);
   }
   return true;
}

int ASCII_N(long long int N_digits) {
   int count = 0;
   int total[10] = {
      0
   };

   while (N_digits > 0) {
      int values = N_digits % 10;
      total[values]++;
      N_digits = floor(N_digits / 10);
   }
   for (int i = 97; i <= 122; i++) {
      if (check(total, i)) {
         count++;
      }
   }
   for (int i = 65; i < 91; i++) {
      if (check(total, i)) {
         count++;
      }
   }
   return count;
}
int main() {
   long long int N_digits = 251326;
   cout << "Count of alphabets whose ASCII values can be formed with the digits of N are: " << ASCII_N(N_digits);
}

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

ผลลัพธ์

Count of alphabets whose ASCII values can be formed with the digits of N are: 2