题目分析与思路引导+题解
2024-04-20 14:01:02
发布于:广东
31阅读
0回复
0点赞
其实这题的意思就是类似于平均分的一道题。
题目意思:
1,字典序最小的一种方案:其实就是从小到大排序的意思
2,尽可能大:
我首先拿8和3来做个例子,8/3=2,8%3=2。
也就是说输出是建立在“2 2 2”的基础上输出的。
又因为“8%3=2”,那么3个2里面就会有2个2比中间值“2”大1.
所以输出就是“2 3 3”。
在这里要提醒一下,我同样拿8和3做例子。
上面的“2 3 3”乘积为18(2×3×3=6×3=18)。
但如果你说“2 2 4”也可以,那我给你分析一下:
“2 2 4”乘积为16(2×2×4=4×4=16)。
而16<18,所以只有“2 3 3”是对的。
听不懂的也可以结合代码来理解~~
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
int n,m;
cin>>n>>m;//n=8,m=3
if(n%m==0){
sum=n/m;
for(int i=0;i<m;i++){
cout<<sum<<" ";
}
}
以上代码为一种情况:
假设n和m呈倍数关系,那么我们可以直接用“/”来求出其中一个数(sum)。
然后再重复m次输出sum。
else if(n%m!=0){
sum=n/m;
int sure=n-sum*m;
int number=m-sure;
//cout<<number;
for(int i=0;i<m;i++){
if(number>0){
cout<<sum<<" ";
number-=1;
}else{
cout<<sum+1<<" ";
}
}
}//例:(8 3)3 2 3=18;2 2 4=16
return 0;
}
而这段代码是为了求出n和m不呈倍数的情况:
先用“/”求出中间值(sum)。
然后再用“n-sum×m”求出有几个数要大“1”,
而“number”就是用来看我需要输出多少个原来的sum。
当“number”归0时,也就意味着接下来的输出全部都为“sum+1”。
全部评论 1
抱歉,有人不小心把您踢走了,请问您能重新加入吗?
https://www.acgo.cn/application/18305703350927073282025-03-15 来自 广东
0
有帮助,赞一个