有一个只有加法和乘法且一定同时包含这两种运算符的算术式,假设你可以合法的任意加括号,请求出这个算术式能得到的最大值和最小值。
参与运算的数字都是正整数,数字个数不超过 10 。每个数字的大小不超过 10 。
2 + 3 * 5 + 4 =
45
21
// #include <iostream>
#include <bits/stdc++.h>
// #define abs(a) (a<0?-a:a)
// #define max(a,b) (a>b?a:b)
// #define min(a,b) (a<b?a:b)
// #define int long long
// #define int __int128
#define endl '\n'
using namespace std;
string s;
int c1,c2;
signed main() {
ios::sync_with_stdio(0);
cin.tie(NULL);
getline(cin,s);
// 去空格
while(s.find(" ") != -1){
s.erase(s.find(" "),1);
}
c1 = 1;
s = " " + s;
// 最大
int i = 1,c = s[1]-'0';
while(s[i] != '='){
if(s[i] == '+'){
c = c + (s[i+1]-'0');
}else if(s[i] == '*'){
c1 *= c;
c = s[i+1]-'0';
}
i++;
}
c1 *= c;
// 最小
i = 1,c = s[1]-'0';
while(s[i] != '='){
if(s[i] == '+'){
c2 += c;
c = s[i+1]-'0';
}else if(s[i] == '*'){
c = c * (s[i+1]-'0');
}
i++;
}
c2 += c;
cout << c1 << endl;
cout << c2 << endl;
return 0;
}
期中考没时间用电脑调了 /dk
最大是把全部加的括起来再乘
最小是正常算
另一个球思路
Alice 的父亲是一个伟大的数学家,他很喜欢和 Alice 一起玩数学游戏,这次他写下一系列的数,告诉 Alice 可以进行以下操作:
选择序列中的任意两个数 A 和 B,再选择一个能整除 A 的素数 X ,然后用 A/X 替代 A,用 B×X 替代 B。
上述操作可以进行任意次,最终得分为数列中所有数的最大公约数。
请你帮助 Alice 获得最大得分。
3
4 4 1
2
---
3
8 24 9
12