悬关 - 求助站外题
  • 板块学术版
  • 楼主Lovely_Elaina
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/4/17 19:36
  • 上次更新2023/10/23 18:12:02
查看原帖
悬关 - 求助站外题
781159
Lovely_Elaina楼主2023/4/17 19:36

有一个只有加法和乘法且一定同时包含这两种运算符的算术式,假设你可以合法的任意加括号,请求出这个算术式能得到的最大值和最小值。

参与运算的数字都是正整数,数字个数不超过 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
2023/4/17 19:36
加载中...