n개의 요소가 있는 배열 A가 있다고 가정합니다. 배열의 각 숫자를 d로 나눈 후 배열에 표시되는 양수 값의 수가 배열 크기의 절반 이상이 되도록 0이 아닌 정수 d를 찾아야 합니다. . 조건을 만족하는 d 값이 여러 개인 경우. 답변이 여러 개인 경우 그 중 하나를 반환하십시오.
따라서 입력이 A =[10, 0, -7, 2, 6]과 같으면 출력은 4가 됩니다. 여기서 n =5 이므로 최소한 $\mathrm{\left \lceil 5/가 필요합니다. 2\right \rceil=3}나누기 후의 $ 요소. d =4인 경우 나눗셈 후 배열은 [2.5, 0, −1.75, 0.5, 1.5]가 되며 3개의 양수는 2.5, 0.5 및 1.5입니다.
단계
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
z :=0, f :=0n :=초기화 i :=0에 대한 A의 크기, i0, then:(z를 1만큼 증가) a <0이면, (f를 1만큼 증가) 2 * z>=n이면, then:2 * f>=n일 때 1을 반환, 그렇지 않으면 2 * f>=n, then:-1을 반환합니다. 그렇지 않으면 0을 반환합니다.사전> 예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include네임스페이스 std;int solve(vector A){ int z =0, f =0; 정수 n =A.크기(); for (int i =0; i 0) z++; if (a <0) f++; } if (2 * z>=n) 반환 1; else if (2 * f>=n) return -1; else return 0;}int main(){ vector A ={ 10, 0, -7, 2, 6 }; cout <<해결(A) < 입력
{ 10, 0, -7, 2, 6 }출력
1