Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

다음 항목을 좋아하는지 여부를 순환적으로 세 항목을 확인하는 C++ 프로그램

<시간/>

n개의 요소가 있는 배열 A가 있다고 가정합니다. 지구에는 n개의 평면이 있으며 1부터 n까지 번호가 매겨져 있습니다. 숫자가 i인 평면은 평면 A[i]를 좋아합니다. A[i] !=나. p가 q를 좋아하고, q가 r을 좋아하고, r이 p를 좋아하는 세 개의 평면 p, q, r이 있는지 확인해야 합니다.

따라서 입력이 A =[2, 4, 5, 1, 3]과 같으면 삼중항이 [2, 4, 1]이기 때문에 출력은 True가 됩니다.

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   if A[A[A[i + 1]]] is same as i + 1, then:
      return true
return false

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;

bool solve(vector<int> A) {
   int n = A.size();
   for (int i = 0; i < n; i++) {
      if (A[A[A[i + 1]]] == i + 1) {
         return true;
      }
   }
   return false;
}
int main() {
   vector<int> A = { 2, 4, 5, 1, 3 };
   cout << solve(A) << endl;
}

입력

{ 2, 4, 5, 1, 3 }

출력

1