c++聪聪看书(低数据版代码)

时间:2023-12-19 23:36:56

聪聪是一个善良可爱、睿智聪慧的好孩子。聪聪喜欢看书,这一天她在看一本书时看到了这样一个问题:给你一个正整数n,你要将它分成若干个自然数Ai的和的形式,并且使得这若干个自然数Ai的乘积尽量大,并输出最大乘积。比如n=5的情况,最优的方案是5=2+3,答案为6。这么简单的问题聪聪当然会做了,她想考考你,你能不能比她先给出问题的答案呢?

【输入】

输入文件名为reading.in 共1行,包含1个正整数n。

【输出】

输出文件reading.out 共1行,包含1个整数,表示最大乘积。

【输入输出样例】

reading.in / reading.out

7

12

【数据范围】
      对于30%的数据,1≤n≤10。
      对于60%的数据,1≤n≤100。
      对于100%的数据,1≤n≤10000。

小学奥数学过吗?这题的思路是:每次从n中拆出3,然后m*3,直到n<=4为止。当n<=4时,m再最后乘一次n。不知这个思路学过没?

为什么n<=4就结束?其实多手写几组数据就知道:有的时候m最后乘一个4的时候,结果会最大,而最后一次不可能乘以5!(5可以分为3和2,3*2=6,这比乘5更大)

这是代码,有问题评论。

#include<iostream>
using namespace std;
int n,m=1;
int main()
{
cin>>n;
if(n<=4) m=n;
else
{
while(n>4)
{
n-=3;
m*=3;
}
if(n!=0) m*=n;
}
cout<<m;
system("pause");
return 0;
}

这个代码只能得60分,因为当n<=10000的时候,结果会有好几百位,所以要用高精度。