首页 > 试题广场 >

小美的加法

[编程题]小美的加法
  • 热度指数:3836 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小美有一个长度为 n 的数组,她想将这个数组进行求和,即 sum = a_1+a_2+...+a_n
小美可以使用一次魔法(也可以不使用),将其中一个加号变成乘号,使得 sum 最大。
求出最大的 sum

输入描述:
第一行输入一个整数 n
第二行输入 n 个整数表示数组 a
1 \leq n \leq 10^5
1 \leq a_i \leq 10^9


输出描述:
输出一个整数表示答案。
示例1

输入

6
1 1 4 5 1 4

输出

27

说明

小美可以将 4 和 5 之间的加号改成乘号。
1 + 1 + 4 * 5 + 1 + 4 = 27
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        long[] a = new long[n];
        long sum = 0;
        for (int i = 0; i < n; ++i) {
            a[i] = in.nextLong();
            sum += a[i];
        }
        long ans = sum;
        for (int i = 0; i < n - 1; ++i) {
            ans = Math.max(ans, sum - a[i] - a[i + 1] + a[i] * a[i + 1]);
        }
        System.out.println(ans);
    }
}

编辑于 2023-12-26 20:41:47 回复(1)
import java.util.Scanner;
import java.util.ArrayList;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Long> list = new ArrayList<>();
        long first;
        long next = 1;
        long mult;
        long mult1 = 0;
        long sub = 0;
        long sub1 = 0;
        long sum = 0;
        boolean b =false;
        while (scanner.hasNextLong()){
            long math = scanner.nextLong();
            for (int i = 0; i < math; i++) {
                first = scanner.nextInt();
                list.add(first);
                mult = first * next;
                if (sub1 == 0){
                    if (mult > mult1 && mult > first + next - 1){
                        mult1 = mult;
                        sub1 = sub;
                        b =true;
                    }
                }else  if (mult > mult1 && mult > first + next){
                    mult1 = mult;
                    sub1 = sub;
                    b =true;
                }
                next = first;
                sub++;
            }

        }
        for (int i = 0; i < list.size(); i++) {
            if ((i == sub1 - 1 || i == sub1) && b == true ){
                continue;
            }
            sum = sum + list.get(i);
        }
        sum = sum + mult1;
        System.out.println(sum);
    }
}


我的答案看来复杂得多啊
发表于 2023-11-19 22:12:14 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class TestNiuKeMain2 {
    public static void main(String[] args) {
        System.out.println(Long.MAX_VALUE);
        System.out.println("===== test1 =====");
        Scanner in = new Scanner(System.in);
        int count = in.nextInt();
        System.out.println(count);
        long sum = 0;
        long[] nums = new long[count];
        for (int i = 0; i < count; i++) {
            nums[i] = in.nextInt();
            sum += nums[i];
        }
        long res = 0;
        for (int i = 1; i < count; i++) {
            res = Math.max(res, sum - nums[i] - nums[i - 1] + nums[i] * nums[i - 1]);
        }
        System.out.println(res);
    }
}

发表于 2023-10-09 13:15:50 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int length = in.nextInt();
        long[] arr = new long[length];
        for(int i=0 ;i<length;i++){
            arr[i] = in.nextLong();
        }
        long gap = 0;
        int left =0;int right = 1;
        while(right < length){
            gap = Math.max(gap,arr[left]*arr[right] - (arr[left]+arr[right]));
            left++;right++;
        }
        long sum = Arrays.stream(arr).sum();
        sum = Math.max(sum,sum+gap);
        System.out.println(sum);
    }
}

简单明了看了都说好
编辑于 2023-09-12 11:29:13 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
        arr[i] = in.nextLong();
        }
       
        long max1 = Long.MIN_VALUE;
        long max2 = Long.MIN_VALUE;
        int max1Index = -1;
        int max2Index = -1;
        for (int i = 0; i < n; i++) {
        if (arr[i] > max1) {
            max2 = max1;
            max1 = arr[i];
            max2Index = max1Index;
            max1Index = i;
        } else if (arr[i] > max2) {
            max2 = arr[i];
            max2Index = i;
        }
        }
       
        long sum = 0;
        for (int i = 0; i < n; i++) {
        if (i != max1Index && i != max2Index) {
            sum += arr[i];
        }
        }
       
        sum += max1 * max2;
       
        System.out.println(sum);
        }
}
//我这个代码思路哪里有问题吗?案例通过但是提交不了。。。
发表于 2023-08-31 14:57:58 回复(2)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        long[] a=new long[n];
        long sum=0;
        long max=1;
        for (int i = 0; i <n ; i++) {
            a[i]=in.nextLong();
            sum+=a[i];
        }
        long r;
        long s=0,b = 0;
        for (int i = 0; i <n-1 ; i++) {
                r=a[i]*a[i+1];
                if (max<=r){
                    max=r;
                    s=a[i];
                    b=a[i+1];
                }
        }
        System.out.println(sum-s-b+max);

    }
}

发表于 2023-08-25 19:37:09 回复(1)