檢查從給定起始索引是否可以到達值為 K 的索引


C++ 具有按位運算子“||”用於同時檢查多個條件,並使用 size() 函式查詢陣列的長度。在給定的問題陳述中,我們需要到達陣列範圍內設定為 0 的第 K 個值,並且起始索引已知。如果給定索引滿足陣列範圍內的第 K 個值,則它將列印“我們可以從給定的起始索引到達值 k”。

讓我們來看一個例子:

給定的整數陣列為5,6,0,9,10,長度為 4,起始索引為2,用作陣列的長度。

因此,在陣列的第二個索引處找到第 K 個值,這驗證了對其的可能到達。

在本文中,我們將檢查當起始索引已知時到達索引 k 的可能性。

語法

vector <datatype> vector_variable_name;

引數

vector − 這是關鍵字。

資料型別 − 這可以是任何原始資料型別,例如 int、float 等。

vector 變數名 − 為 vector 變數提供的名稱

演算法

  • 我們將使用名為‘iostream’‘vector’的標頭檔案開始程式。

  • 我們將類名初始化為‘K_reach’以定義資料變數和成員。

  • 在類的私有部分,我們初始化型別為 vector 整數的‘arr’

  • 在類的公共部分,我們初始化名為‘k_reach()’的建構函式,其中我們將引數作為型別為 vector 整數的‘inputArr’傳遞。然後將‘inputArr’的值儲存到‘arr’變數中,以滿足對第 K 個值的操作。

  • 同樣在公共部分,我們初始化名為‘is_Reach()’的成員函式及其引數‘s’‘k’為整數型別,它將分別從變數‘start_element’‘K’接受值(檢查主函式)並驗證它是否可以從起始索引到達第 K 個值。

  • 我們使用兩個 if 語句返回以下內容:

    • s >= arr.size() || s < 0 || arr[s] < 0 − 為了找到第 K 個值,它將使用邏輯或“||”檢查所有這些條件,如果滿足條件,則返回 false,這意味著找不到第 K 個值。

    • arr[s] == k − 如果這兩個變數匹配,則返回 true,這意味著找到了第 K 個值。

  • 然後我們將‘arr[s]’儲存到整數變數‘x’中,然後將‘arr[s]’設定為‘-1’,這將檢查陣列元素的資料型別是否有效。

  • ‘isReach()’函式的布林值將返回以下兩個條件:

    • is_Reach( s+x, k) − 透過使用它,它將迭代以從開頭搜尋第 K 個索引值。

    • is_Reach( s-x, k ) − 透過使用它,它將迭代以從最後搜尋第 K 個索引值。

  • 現在我們將開始主函式並宣告陣列輸入。

  • 我們將值‘4’儲存到變數‘start_element’中,它用作索引位置的長度。然後將值‘0’儲存到變數 K 中,以從起始索引查詢匹配的值。

  • 我們建立類‘k_reach’並獲取名為 A 的物件以傳遞陣列元素的引數。

  • 我們將兩個引數傳遞給‘is_Reach()’函式,即‘start_element’和‘K’,它將傳遞的引數驗證為輸入。

  • 最後,我們將‘pass’應用於 if 語句,以檢查是否從起始索引到達了第 k 個值並列印結果。

示例

在這個程式中,我們將檢查當給定起始索引時到達具有 K 值的索引的可能性。

#include<iostream>
#include<vector>
using namespace std;
class k_reach {
   private:
   vector<int> arr;
   public:
   k_reach(vector<int> inputArr) {
      arr = inputArr;
   }
   bool is_Reach(int s, int k) {
      if ( s >= arr.size() || s < 0 || arr[s] < 0 )
      {
         return false;

      }
      if ( arr[s] == k ) 
      {
         return true; 

      }
      int x = arr[s];
      arr[s] = -1;
      return is_Reach(s+x, k) || is_Reach(s-x, k);
   }
};
int main() {
   vector<int> arr{2,8,4,2,0,6};
   int start_element = 4; 
   
   // represents as length position i.e, 0
   int K = 0;
   k_reach A(arr); 
   
   // here A is the object and arr is the parameter
   bool pass = A.is_Reach(start_element, K);
   if (pass)
   cout << "We can reach the value k from the given start index.";
   else
   cout << "We cannot reach the value k from the given start index.";
   return 0;
}

輸出

We can reach the value k from the given start index.

結論

我們探討了當給定起始索引時到達具有 k 值的索引的可能性概念。我們看到了如何使用按位運算子同時給出兩個條件,還看到了面向物件程式設計的概念如何對這個問題有用。例如,假設我們的 ID 用作 K 值,起始索引用作 ID 的序列號。

更新於:2023年5月10日

98 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.