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

Đếm số hình bình hành trong một mặt phẳng trong C ++


Chúng ta được giao một mặt phẳng chứa các điểm tạo thành hình bình hành và nhiệm vụ là tính số lượng các hình bình hành có thể được tạo thành bằng cách sử dụng các điểm đã cho. Trong hình bình hành các cạnh đối diện của một tứ giác là song song và do đó các góc đối diện bằng nhau.

Đầu vào -

int a[] = {0, 2, 5, 5, 2, 5, 2, 5, 2}
Int b[] = {0, 0, 1, 4, 3, 8, 7, 11, 10}

Đếm số hình bình hành trong một mặt phẳng trong C ++

Đầu ra - Đếm số hình bình hành trong mặt phẳng - 3

Giải thích - chúng ta được cho với các điểm (x, y) và sử dụng các điểm này, chúng ta có thể tạo thành số lượng 3 hình bình hành như trong hình.

Đầu vào -

a[] = {0, 3, 1, 4, 1, 5}
b[] = {0, 1, 3, 4, 4, 4}

Đầu ra - Đếm số hình bình hành trong mặt phẳng - 1

Giải thích - chúng ta được cho với các điểm (x, y) và sử dụng các điểm này, chúng ta có thể tạo thành một số lượng 1 hình bình hành như trong hình.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập mảng_1 cho các giá trị tọa độ x và mảng_2 cho các giá trị tọa độ y

  • Tính kích thước của mảng_1 và chuyển dữ liệu vào hàm để xử lý thêm

  • Tạo một biến kiểu bản đồ sẽ tạo thành cặp và lưu trữ dữ liệu kiểu số nguyên

  • Tạo một số biến tạm thời để lưu trữ tổng số các hình bình hành có thể được tạo thành

  • Bắt đầu vòng lặp FOR i từ 0 cho đến hết kích thước của một mảng_1

  • Bắt đầu một vòng lặp FOR j khác từ i + 1 cho đến hết kích thước của một mảng_1

  • Bên trong các vòng lặp, đặt a_mid với a [i] + a [j] và đặt b_mid với b [i] + b [j]

  • Và tăng các giá trị giữa của mảng_1 và mảng_2 lên 1

  • Bắt đầu một vòng lặp khác sẽ đi qua bản đồ từ đầu đến cuối

  • Bên trong vòng lặp, hãy đặt một biến tạm thời với giá trị y của cặp

  • Và đặt số đếm với temp * (temp -1) / 2

  • Số lần trả lại

  • In kết quả.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
//Count of parallelograms in a plane
int parallelogram(int a[], int b[], int size){
   map<pair<int, int>, int> um;
   int count = 0;
   for (int i=0; i<size; i++){
      for (int j=i+1; j<size; j++){
         int a_mid = a[i] + a[j];
         int b_mid = b[i] + b[j];
         um[make_pair(a_mid, b_mid)]++;
      }
   }
   for (auto it = um.begin(); it != um.end(); it++){
      int temp = it->second;
      count+= temp*(temp - 1)/2;
   }
   return count;
}
int main(){
   int a[] = {0, 3, 1, 4, 1, 5};
   int b[] = {0, 1, 3, 4, 4, 4};
   int size = sizeof(a) / sizeof(int);
   cout<<"Count of parallelograms in a plane: "<<parallelogram(a, b, size) << endl;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of parallelograms in a plane: 1