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

สัญลักษณ์ที่ K ในไวยากรณ์ในภาษา C++


สมมติว่าในแถวแรก เรามี 0 ทีนี้ ในทุกแถวต่อๆ มา เราจะดูที่แถวก่อนหน้าและแทนที่การเกิดขึ้นของ 0 ด้วย 01 และแต่ละการเกิดขึ้นของ 1 คูณ 10 สมมติว่าเรามี N แถวและดัชนี K เรา ต้องหาสัญลักษณ์ที่ดัชนี K-th ในแถว N. (ค่าของ K คือ 1-indexed.) (ดัชนี 1 รายการ) ดังนั้นหาก N =4 และ K =5 ผลลัพธ์จะเป็น 1 เนื่องจาก −

  • แถว 1:0
  • แถว 2:01
  • แถว 3:0110
  • แถวที่ 4:01101001

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • สมมติว่าชื่อของเมธอดคือ kthGrammar ต้องใช้ N และ K
  • ถ้า N เป็น 1 ให้คืนค่า 0
  • ถ้า k เป็นเลขคู่ ให้คืนค่า 1 เมื่อ kthGrammar(N – 1, K/2) เป็น 0 มิฉะนั้น 0
  • มิฉะนั้นให้คืนค่า kthGrammar(N – 1, (K + 1)/2)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int kthGrammar(int N, int K) {
      if(N == 1) return 0;
      if(K % 2 == 0){
      return kthGrammar(N - 1, K / 2) == 0 ? 1 : 0;
      }else{
         return kthGrammar(N - 1, (K + 1) / 2);
      }
   }
};
main(){
   Solution ob;
   cout << (ob.kthGrammar(4, 5));
}

อินพุต

4
5

ผลลัพธ์

1