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

นับวิธีสะกดตัวเลขด้วยตัวเลขซ้ำในภาษา C++


เราได้รับตัวเลขที่มีตัวเลขซ้ำหลายหลักเป็นสตริง เป้าหมายคือการหาจำนวนวิธีสะกดคำ ตัวอย่างเช่น 112233 สามารถสะกดเป็น double one, double two double 3 หรือ one two two 3 three

เราจะทำสิ่งนี้โดยการตรวจสอบตัวเลขอย่างต่อเนื่อง หากตัวเลขคือ "13" มีวิธีเดียวเท่านั้นที่จะสะกดเป็น "หนึ่งสาม" (20) หากตัวเลขเป็น “113” เท่ากับ “ดับเบิ้ลหนึ่งสาม”, “หนึ่งหนึ่งสาม” (21) วิธีการคือนับหนึ่งหลักต่อเนื่องในสตริงและคูณ 2(count-1) กับผลลัพธ์ก่อนหน้า

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล

num=”11211”

ผลผลิต

Count of ways to spell a number with repeated digits are: 4

คำอธิบาย

ways are:
1. One one two one one
2. Double one two one one
3. One one two double one
4. Double one two double one

ป้อนข้อมูล

num=”2212”

ผลผลิต

Count of ways to spell a number with repeated digits are: 2

คำอธิบาย

ways are:
1. Two two one two
2. Double two one two

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

  • เราใช้ string str แทนตัวเลข

  • ฟังก์ชัน word_spell(สตริง str) ใช้ตัวเลขใน str และส่งคืนวิธีการสะกดคำ

  • ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับวิธีดังกล่าว

  • ใช้สำหรับ loop traverse str สำหรับแต่ละหลัก

  • ใช้ตัวแปร temp เป็นจำนวนซ้ำของตัวเลขเฉพาะ ถ้า str[i]==str[i+1] ให้เพิ่มอุณหภูมิ

  • คำนวณ count=count*pow(2,temp-1)

  • เมื่อสิ้นสุดผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
long long int word_spell(string str){
   long long int count = 1;
   int len = str.length();
   for (int i=0; i<len; i++){
      int temp = 1;
      while(i < len-1 && str[i+1] == str[i]){
         temp++;
         i++;
      }
      count = count * pow(2, temp-1);
   }
   return count;
}
int main(){
   string str = "222211";
   cout<<"Count of ways to spell a number with repeated digits are: "<<word_spell(str);
   return 0;
}

ผลลัพธ์

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

Count of ways to spell a number with repeated digits are: 16