学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
给定一个字符串str,保证字符串由a(a>1)个数字字符和1个字符’+'组成。
现在你可以向字符串str中添加一对括号:
- 左括号必须添加在’+'的左侧;
- 右括号必须添加在’+'的右侧;
假设左括号左边的数字从左到右组成的整数为p,左括号与’+‘之间的数字从左到右组成的整数为q,’+'与右括号之间的数字从左到右组成的整数为r,右括号右边的数字从左到右组成的整数为s。
请你安排左括号和右括号的位置,使得p * (q + r) * s最小,并输出这个最小值。
注意,如果左括号在字符串最左侧,认为p=1,类似的,如果右括号在字符串最右侧,认为s=1,则’+'两边必须存在数字。
【输入】
一行一个字符串str,保证’+'的位置合法。
【输出】
一行一个整数,表示p * (q + r) * s的最小值。
【输入样例】
12+34
【输出样例】
20
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
int n = s.size();
int mid = s.find('+');
int best = 2e9;
for (int i=0; i<mid; i++) {
for (int j=mid+1; j<n; j++) {
int a = (i==0 ? 1 : stoi(s.substr(0,i)));
int b = stoi(s.substr(i, mid-i));
int c = stoi(s.substr(mid+1, j-mid));
int d = (j==n-1 ? 1 : stoi(s.substr(j+1, n-j-1)));
int result = a * (b+c) * d;
// cout << "result " << result << endl;
if (result <= best)
best = result;
}
}
cout << best;
return 0;
}
【运行结果】
12+34
20