检查在给定起始索引的情况下是否有可能达到值为 K 的索引

c++server side programmingprogramming

C++ 有一个按位运算符"||"来同时检查多个条件,并且为了查找数组的长度,我们使用 size() 函数。在给定的问题陈述中,我们需要达到数组范围内设置为 0 的第 K 个值,并且起始索引是已知的。如果给定的索引满足数组范围内的第 K 个值,则它将打印 "我们可以从给定的起始索引到达值 k"。

让我们举个例子 -

给定的整数数组为 5,6,0,9,10,长度为 4,起始索引为 2,用作数组的长度。

因此,在数组的第二个索引处找到第 K 个值,以验证可能到达它。

在本文中,我们将在已知起始索引的情况下检查可能到达索引 k。

语法

vector <datatype> vector_variable_name;

参数

vector − 这是关键字。

datatype − 可以是任何原始数据类型,如 int、float 等。

vector_variable name − 提供给向量变量的名称

算法

  • 我们将使用头文件'iostream''vector'启动程序。

  • 我们将类名初始化为'K_reach'来定义数据变量和成员。

  • 在类的私有部分,我们正在初始化类型为向量整数的'arr'

  • 在类的公共部分,我们正在初始化名为'k_reach()' 其中我们将参数作为向量整数类型的'inputArr'传递。然后将'inputArr'的值存储到满足对第 K 个值进行操作的'arr'变量中。

  • 同样在公共部分,我们初始化名为'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;
    
    // 表示长度位置,即 0
    int K = 0;
    k_reach A(arr);
    
      // 这里 A 是对象,arr 是参数
    bool pass = A.is_Reach(start_element, K);
    if (pass)
        cout << "我们可以从给定的起始索引到达值 k。";
    else
        cout << "我们无法从给定的起始索引到达值 k。";
    return 0;
}

输出

我们可以从给定的起始索引到达值 k。

结论

我们探讨了给定起始索引时可能到达具有 k 值的索引的概念。我们了解了如何使用按位运算符同时给出两个条件,还了解了 oops 概念对这个问题陈述有何用处。例如,假设我们的 id 充当 K 值,起始索引充当 id 的序列顺序。


相关文章