列表

详情


CMB11. 整数成绩最大化

描述

给出一个整数n,将n分解为至少两个整数之和,使得这些整数的乘积最大化,输出能够获得的最大的乘积。
例如:
2=1+1,输出1;
10=3+3+4,输出36。

输入描述

输入为1个整数

输出描述

输出为1个整数

示例1

输入:

10

输出:

36

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 356KB, 提交时间: 2020-07-16

#include<stdio.h>

int main()
{
    int n,sum=1;
    int last=sum;
    scanf("%d",&n);
    for(int i=2;i<n;i++){
        int p1=n/i;
        int p2=p1+1;
        int num2=n%i;
        int num1=i-num2;
        //printf("%d %d %d %d\n",p1,p2,num1,num2);
        sum=1;
        for(int i=0;i<num1;i++){
            sum*=p1;
        }
        for(int i=0;i<num2;i++){
            sum*=p2;
        }
        if(sum<last){
            break;
        }
        last=sum;
    }
    printf("%d",last);
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2018-08-31

#include "stdio.h"

int get_max_result(n){
    switch (n){
        case 1: return 1;
        case 2: return 2;
        case 3: return 3;
        case 4: return 4;
        case 5: return 6;
        case 6: return 9;
        default: return 3*get_max_result(n-3);
    }
}

int main(){
    int n;
    while(scanf("%d", &n) != EOF)
        printf("%d\n", get_max_result(n));
}

C 解法, 执行用时: 2ms, 内存消耗: 224KB, 提交时间: 2019-05-30

#include<stdio.h>
int fun(int n)
{
    if(n>4)
    {
        return 3*fun(n-3);
    }
    else
    {
        return n;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",fun(n));
}

C 解法, 执行用时: 2ms, 内存消耗: 228KB, 提交时间: 2019-03-20

#include<stdio.h>
int main(void)
{
    //任意整数最大化均在原基础之上
    //F(2)=1<2   F(3)=2<3   F(4)=2*2
    //2^(N/2)<3^(N/3),故选 3^(N/3)
    int n;
    int result;
    scanf("%d",&n);
    
    if(n==2)
    {
        result=1;
    }
    else if(n==3)
    {
        result=2;
    }
    
    else if(n%3==0)
    {
        result=pow(3,(n/3));
    }
    
    else if(n%3==1)
    {
        result=pow(3,((n/3)-1))*4;
    }
    
    else if(n%3==2)
    {
        result=pow(3,(n/3))*2;
    }
    
    printf("%d\n",result);
}

C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-09-22

#include<stdio.h>
int main() {
    int n = 0,
        res = 1;
    scanf("%d", &n);
    if (n < 0) {
        res = 0;
    } else if (n == 1 || n == 2) {
        res = 1;
    } else if (n == 3) {
        res = 2;
    } else {
        while (n > 4) {
            res *= 3;
            n -= 3;
        }
        res = res * n;
    }
    printf("%d\n", res);
    return 0;
}

上一题