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

C++에서 숫자의 M 연속 자릿수의 최대 합과 곱

<시간/>

이 문제에서는 숫자를 나타내는 문자열이 제공됩니다. 우리의 임무는 C++의 숫자에서 M개의 연속된 숫자의 최대 합과 곱을 찾는 프로그램을 만드는 것입니다.

문제 설명

M개의 연속된 숫자의 모든 시퀀스를 찾습니다. 그리고 최대 합계와 곱을 반환합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

number = 2379641, M = 4

출력

maxSum = 26maxProd = 1512

설명

크기 4의 모든 하위 시퀀스는 2379, 3796, 7964, 9641입니다. maxSum =7 + 9 + 6 + 4 =26 maxProd =7 * 9 * 6 * 4 =1512

해결 방법

이 문제에 대한 간단한 해결책은 크기가 M인 모든 가능한 연속 부분 수열을 찾는 것입니다. 그런 다음 정수의 모든 값을 더하고 곱한 다음 모든 합과 곱 값의 최대값을 반환합니다.

솔루션의 작동을 설명하는 프로그램,

#include <iostream>
using namespace std;
int findMaxVal(int x, int y){
   if(x > y)
      return x;
      return y;
}
void calcMaxProductAndSum(string number, int M){
   int N = number.length();
   int maxProd = -1, maxSum = -1;
   int product = 1, sum = 0;
   for (int i = 0; i < N - M; i++){
      product = 1, sum = 0;
      for (int j = i; j < M + i; j++){
         product = product * (number[j] - '0');
         sum = sum + (number[j] - '0');
      }
      maxProd = findMaxVal(maxProd, product);
      maxSum = findMaxVal(maxSum, sum);
   }
   cout<<"The Maximum Product of "<<M<<" consecutive digits in number "<<number<<" is "<<maxProd<<endl;
   cout<<"The Sum Product of "<<M<<" consecutive digits in number "<<number<<" is "<<maxSum;
}
int main() {
   string str = "2379641";
   int m = 4;
   calcMaxProductAndSum(str, m);
}

출력

The Maximum Product of 4 consecutive digits in number 2379641 is 1512
The Sum Product of 4 consecutive digits in number 2379641 is 26