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

C++에서 주어진 수를 줄이는 데 필요한 연산의 수를 센다.


양의 정수 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