양의 정수 K와 정수를 포함하는 배열 Ops[]가 제공됩니다. 목표는 0보다 작아지도록 K를 줄이는 데 필요한 연산의 수를 찾는 것입니다. 연산은 -
-
첫 번째 연산은 K + Ops[0], K에 추가된 첫 번째 요소입니다.
-
After 1. K<0이 될 때까지 Ops[i]를 K에 추가합니다. 여기서 인덱스 i는 순환 방식으로 계속 변경됩니다.0<=i
참고 − K<0이 될 때까지 Ops[i]를 계속 추가합니다. i가 마지막 요소 Ops[N-1]에 도달하면 i=0에서 다시 시작합니다. 순환 방식으로.
먼저 배열 Ops[]의 모든 요소의 합이 0보다 큰지 확인합니다. 그렇다면 K는 절대 줄어들 수 없습니다. -1을 반환합니다. 그렇지 않으면 Ops[i]를 K에 계속 추가하고 루프가 중단되면 K<0인지 확인하십시오.
추가 후 작업 수 증가:K+Ops[i].
예를 들어 이해합시다.
입력 -
ops[]= { -4,2,-3,0,2 }, K=5
출력 − 숫자를 줄이는 데 필요한 작업 수 − 3
설명 − K는 5입니다. 연산은 −
1. K+ops[0]= 5+(-4) = 1 2. K+ops[1]= 1+2 = 3 3. K+ops[2]= 3+(-3) = 0
입력 -
ops[]= { 5,5,3,-2 }, K=10
출력 − K는 줄일 수 없습니다!!
설명 −K는 10입니다. 연산은 −
입니다.1. K+ops[0]= 10+5= 15 2. K+ops[1]= 15+5= 20 3. K+ops[2]= 20+3= 23 4. K+ops[3]= 23+-2= 22 5. K+ops[0]= 22+5= 27 6. K+ops[1]= 27+5=32 7. …………………
ops[]=5+5+3-2=11 및 11+10의 모든 요소의 합을 조기에 확인하면 항상 +ve입니다. 따라서 K는 -0으로 줄일 수 없습니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
임의의 정수로 초기화된 정수 배열 ops[]를 사용합니다.
-
변수 K에는 양수 값이 지정됩니다.
-
함수 countOperations(int op[], int n, int k)는 K 배열 Ops[]와 그 길이를 매개변수로 취하고 K를 0 미만으로 줄이는 데 필요한 연산을 반환합니다.
-
초기 작업 횟수를 0으로 간주합니다.
-
op[] 요소의 합을 계산하고 합계에 저장합니다. 합계>=0이면 -1을 반환합니다.
-
k>0 동안이 아니라면 ops[i]를 계속 추가하고 카운트를 증가시키십시오. k<0인 경우 루프가 중단됩니다.
-
결과로 카운트를 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; long countOperations(int op[], int n, int k){ long count = 0; int sum=0; int i=0; for(int i=0;i<n;i++){ sum+=op[i]; } if(sum-k>=0) { return -1; } //number k can never be reduced as sum-k is always positive or 0 while(k>0){ for(i=0;i<n;i++){ if(k>0){ count++; k+=op[i]; } else { break; } } } return count; } int main(){ int Ops[] = { 1,-1,5,-11}; int len= sizeof(Ops) / sizeof(Ops[0]); int K=10; long ans=countOperations(Ops,len,K); if(ans==-1) { cout<<"K cannot be reduced!!"; } else { cout<<"Number of operations : "<<ans; } return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Number of operations : 8