Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm kiếm các giá trị cụ thể trong một mảng

Giả sử chúng ta được cung cấp một mảng 'arr' chứa n số giá trị nguyên được sắp xếp. Chúng ta cũng được cung cấp một 'truy vấn' mảng có kích thước q và chúng ta phải cho biết các giá trị trong 'truy vấn' có trong mảng 'arr' đã cho hay không. Nếu một giá trị trong truy vấn xuất hiện trong arr, chúng tôi in "Hiện tại" cùng với vị trí mà giá trị được đặt. Nếu không, chúng tôi in "Không có" và in vị trí trong arr, trong đó giá trị nhỏ nhất lớn hơn giá trị trong truy vấn được định vị. Chúng ta phải nhớ rằng các mảng được lập chỉ mục 1.

Vì vậy, nếu đầu vào là n =8, arr ={1, 2, 3, 4, 7, 9, 12, 15}, q =3, query ={1, 5, 8}, thì đầu ra sẽ là

Present 1
Not present 5
Not present 6

Giá trị đầu tiên của các truy vấn có ở vị trí 1 trong arr.

Giá trị thứ hai của các truy vấn không có trong arr. Vị trí mà giá trị nhỏ nhất lớn hơn giá trị trong các truy vấn là 5.

Tương tự, giá trị thứ ba của các truy vấn cũng không có trong arr. Giá trị lớn hơn nó ở vị trí 6 của arr.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định các giá trị mảng
  • để khởi tạo i:=0, khi i
  • chèn arr [i] vào cuối các giá trị
  • để khởi tạo i:=0, khi i
  • idx:=(vị trí của phần tử đầu tiên trong các giá trị không nhỏ hơn query [i]) - vị trí phần tử đầu tiên trong các giá trị
  • nếu các giá trị [idx] giống với truy vấn [i], thì -
    • print ("Trình bày")
  • Nếu không,
    • print ("Không có mặt")
  • in (idx + 1)
  • Ví dụ

    Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    #include <vector>
    #include <iostream>
    using namespace std;
    
    void solve(int n, int arr[], int q, int query[]) {
       vector<int> values;
       for(int i = 0; i < n; i++){
          values.push_back(arr[i]);
       }
       for(int i = 0; i < q; i++) {
          int idx = lower_bound (values.begin(), values.end(),
          query[i]) - values.begin();
          if (values[idx] == query[i])
             cout << "Present ";
          else
             cout << "Not present ";
          cout << idx + 1 << endl;
       }
    }
    int main() {
       int input_arr[] = {1, 2, 3, 4, 7, 9, 12, 15};
       int query_arr[] = {1, 5, 8};
       solve(8, input_arr, 3, query_arr);
       return 0;
    }

    Đầu vào (stdin)

    int input_arr[] = {1, 2, 3, 4, 7, 9, 12, 15};
    int query_arr[] = {1, 5, 8};
    solve(8, input_arr, 3, query_arr);

    Đầu ra

    Present 1
    Not present 5
    Not present 6