Computer >> Máy Tính >  >> Lập trình >> C ++

Tổng và tích lớn nhất của M chữ số liên tiếp trong một số trong C ++

Trong bài toán này, chúng ta được cung cấp một chuỗi biểu thị một số. Nhiệm vụ của chúng ta là tạo một chương trình để tìm Tổng và tích lớn nhất của M chữ số liên tiếp trong một số trong C ++.

Mô tả vấn đề

Chúng ta tìm thấy tất cả các dãy gồm M chữ số liên tiếp. Và trả lại số tiền và sản phẩm tối đa.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

number = 2379641, M = 4

Đầu ra

maxSum = 26maxProd = 1512

Giải thích

Tất cả các dãy con có kích thước 4 là 2379, 3796, 7964, 9641. maxSum =7 + 9 + 6 + 4 =26 maxProd =7 * 9 * 6 * 4 =1512

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là tìm tất cả các dãy con liên tiếp có thể có kích thước M tạo thành một số. Sau đó, cộng và nhân tất cả các giá trị của số nguyên rồi trả về giá trị lớn nhất của tất cả các giá trị tổng và tích.

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

#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);
}

Đầu ra

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