洛谷P1887乘积最大3详解

大家好,我是你们的大白,一位开心的小学森!

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

今天很开心

不知道为什么

但也有难过的事

今天被音乐老师叫去干苦力

张小胖在教室里看电影?!

但是她是班长,还要在教室里管人

我不用,还能摸鱼而且劳动最光荣了!

而且就是开心(相比之下,小胖就非常不开心)!

好了,进入正题,今天做的是一道入门题,运气好,抽到了

看题!

题目描述

请你找出 MM 个和为 NN 的正整数,他们的乘积要尽可能的大。

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

输入格式

一行,两个正整数 N,MN,M

输出格式

MM 个和为 NN 的,乘积尽可能的大的正整数。

输入输出样例

输入 #1复制

6 3

输出 #1复制

2 2 2

说明/提示

对于100%的数据,1 \le N \le 10^{9},1 \le M \le 10^{6}1≤N≤109,1≤M≤106。数据保证 N \geq MN≥M。

很简单吧

其实,要求这个,就是用数学知识

n个数相乘,它们的差越小,乘积越大!

懂了吗?

要让它们的差小于等于1才行

一道简单的for循环

时间复杂度O(n)

首先,我想到了一个方法,用取余,然后把n-1个m/n输出,最后输出m/n+余数

因为要输出的是一些一样的数,所以平分,m/n

代码:(错的,脑袋短路,别抄!!!!!!)

#include
using namespace std;
int m,n;
int main(){
	cin>>m>>n;
	int s=m%n;
	for(int i=1;i<=n-1;i++){
		cout<

本以为完成,看看,额,脑袋好像短路了

s>1时,最后一个数会偏大

所以,要用两个for,把s好好的分配一下

第一个for是用来输出前面的数的,因为后面的数要加1(同上面,m/n,所以是m/n+1),所以,后面的要循环s次;

一共要循环n次,那第一个就要循环n-s次

#include
using namespace std;
int m,n;
int main(){
	cin>>m>>n;
	int s=m%n;
	for(int i=1;i<=n-s;i++){
		cout<

这是正确答案!

其实本来还想查乘积最大1、乘积最大2是什么,结果......没有??

那还来3?

无语了。

好了,今天就到这了

我是大白,每日一更,记得关注!!

你可能感兴趣的:(蓝桥杯,c++,算法)