weinan030416

导航

算法

分解自然数之和可重复,乘积最大

#include<bits/stdc++.h>
using namespace std;
//根据数学知识,分成若干个2和3 

int maxn=0; //最大乘积 
void find(int num,int cur)
{    
    if(cur>maxn){
        maxn=cur;
    }
//    cout<<cur<<endl;
    if(num==0||num==1)    return;
    if(num>=3){
        find(num-2,cur*2);
        find(num-3,cur*3);
    }
    if(num==2){
        find(num-2,cur*2);
    }
}

int main()
{
    int num;
//    ifstream in;
//    in.open("input.txt");
//    in>>num;
//    in.close();
    
    cin>>num;

    find(num,1);
    
//    ofstream out;
//    out.open("output.txt");
//    out<<maxn;
//    out.close();
    
    cout<<maxn; 
    return 0; 
}

 分解不同自然数,乘积最大

#include<bits/stdc++.h>
using namespace std;

int maxn=1; //最大乘积 

int main()
{
    int num,i,j,cur=0,n[10000];
    cin>>num;
    if(num<=4){
        cout<<num;
    }
    else{
        for(i=2,j=num;;i++,cur++){
            j-=i;
            n[cur]=i;
            if(j-(i+1)<0){
                break;
            }
        }
        int k=cur;
        for(int t=0;t<j;t++){
            n[k]+=1;
            k--;
//            cout<<"n[k]"<<n[k]<<endl;
        }
        if(k==-2){
            n[cur]++;
        }
//        cout<<"cur"<<cur<<endl;
        for(int t=0;t<=cur;t++){
//            cout<<"n[t]"<<n[t]<<endl;
            maxn*=n[t];
        }
        cout<<maxn; 
    }

    
    return 0; 
}

 删数问题

#include<bits/stdc++.h>
using namespace std;
//删掉最大的m个数字 

int main()
{
    int n,m,num[10000],cur=0;
    cin>>n>>m;
    for(int i=0;n;n/=10,i++){
        num[i]=n%10;
        cur++;
    }
//    for(int i=0,j=cur-1;i<j;i++,j--){
////        cout<<num[i]<<" "<<num[j]<<endl;
//        int tmp=0;
//        tmp=num[i];    num[i]=num[j];    num[j]=tmp;
//    }
    reverse(num,num+cur);
    //num[i]表示 
    int t[10000]; 
    for(int i=0;i<cur;i++){
        t[i]=num[i];
    }
    sort(t,t+cur);
    reverse(t,t+cur);
    for(int i=0;i<m;i++){
        t[i]=10;
    }
//    for(int i=0;i<cur;i++){
//        cout<<t[i]<<" ";
//    }
    for(int i=0;i<cur;i++){
        for(int j=m;j<cur;j++){
            if(num[i]==t[j]){
                cout<<num[i];
                t[j]=10;
            }
        }
    }
    return 0; 
}

 

posted on 2023-10-29 10:04  楠030416  阅读(4)  评论(0编辑  收藏  举报