乘积最大3

题目描述

请你找出 P1887 乘积最大3_洛谷 个和为 P1887 乘积最大3_java_02 的正整数,他们的乘积要尽可能的大。

输出字典序最小的一种方案。

输入格式

一行,两个正整数 P1887 乘积最大3_java_03

输出格式

P1887 乘积最大3_洛谷 个和为 P1887 乘积最大3_java_02 的,乘积尽可能的大的正整数。

样例 #1

样例输入 #1

6 3

样例输出 #1

2 2 2

提示

对于100%的数据,P1887 乘积最大3_算法_06。数据保证 P1887 乘积最大3_洛谷_07

思路解析

先写下我的思路:用N/M,将得出的结果存入长度为M的数组arr,arr中每个元素的值都为N/M。遍历数组求和sum,将sum与N进行比较:如果sum与N相等,那么arr内M个元素相乘,即NM 乘积最大;如果sum不等于N,那么将arr[0]++,再次就和判断,若sum与N还不相等,将arr[1]++,直到sum与N相等。此时arr中元素的值即为最终结果。

对于上边的解释,画图举个例子:(N = 8 , M = 3)

P1887 乘积最大3_洛谷_08

完整代码

import java.util.Scanner;

public class P1887 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] arr = new int[m];
        for (int i = 0; i < m; i++) {
            arr[i] = n / m;
        }

        int sum = 0;
        for (int i = 0; i < m; i++) {
            sum += arr[i];
        }
        int k = m - 1;
        while (sum < n) {
            arr[k]++;
            sum++;
            k--;
        }
        for (int i = 0; i < m; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}