여기서 흥미로운 질문을 보게 될 것입니다. 크기 n의 이진 배열이 주어졌다고 가정합니다. 여기서 n > 3입니다. true 또는 1 값은 활성 상태를 나타내고, 0 또는 false 값은 비활성 상태를 나타냅니다. 또 다른 숫자 k도 주어진다. k일 후에 활성 또는 비활성 셀을 찾아야 합니다. 매번 후에 i번째 셀의 주간 상태는 왼쪽 셀과 오른쪽 셀이 동일하지 않으면 활성 상태이고, 동일하면 비활성 상태입니다. 가장 왼쪽과 가장 오른쪽 셀의 앞이나 뒤에는 셀이 없습니다. 따라서 가장 왼쪽과 가장 오른쪽 셀은 항상 0입니다.
이 아이디어를 이해하기 위해 예를 살펴보겠습니다. 배열이 k = 3인 {0, 1, 0, 1, 0, 1, 0, 1}과 같다고 가정합니다. 날마다 어떻게 변하는지 살펴보겠습니다.
그러므로 2개의 활성 셀과 6개의 비활성 셀
begin make a copy of arr into temp for i in range 1 to k, do temp[0] := 0 XOR arr[1] temp[n-1] := 0 XOR arr[n-2] for each cell i from 1 to n-2, do temp[i] := arr[i-1] XOR arr[i+1] done copy temp to arr for next iteration done count number of 1s as active, and number of 0s as inactive, then return the values. end
#include <iostream> using namespace std; void activeCellKdays(bool arr[], int n, int k) { bool temp[n]; //temp is holding the copy of the arr for (int i=0; i<n ; i++) temp[i] = arr[i]; for(int i = 0; i<k; i++){ temp[0] = 0^arr[1]; //set value for left cell temp[n-1] = 0^arr[n-2]; //set value for right cell for (int i=1; i<=n-2; i++) //for all intermediate cell if left and right are not same, put 1 temp[i] = arr[i-1] ^ arr[i+1]; for (int i=0; i<n; i++) arr[i] = temp[i]; //copy back the temp to arr for the next iteration } int active = 0, inactive = 0; for (int i=0; i<n; i++) if (arr[i]) active++; else inactive++; cout << "Active Cells = "<< active <<", Inactive Cells = " << inactive; } main() { bool arr[] = {0, 1, 0, 1, 0, 1, 0, 1}; int k = 3; int n = sizeof(arr)/sizeof(arr[0]); activeCellKdays(arr, n, k); }
Active Cells = 2, Inactive Cells = 6
위 내용은 k일 후에 활성 세포와 비활성 세포는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!