题解:B4350 [信息与未来 2025] 美味水果

· · 题解

B3450 题解:

主要思路:

代码实现:

定义一个数组 a,循环输入 a 数组,将 a 数组快排(这里我用的 greater<int>() 比较器),再循环处理一遍,每次循环用递归函数处理当前值,最后求和输出。

AC code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int fun(int x,int y){
    int num=x;
    int k=y;
    num=sqrt(num);//开方 
    k--;
    //特判 
    if(num==1){
        return num;
    }
    if(k==1){
        return num;
    }else{
        fun(num,k);
    }
}//递归函数 
int n;
int a[100010];
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    //快排 
    sort(a+1,a+n+1,greater<int>());
    int sum=a[1];
    for(int i=2;i<=n;i++){
        //调用函数,a[i] 为当前待处理值,i 为当前循环次数 
        a[i]=fun(a[i],i);
        sum+=a[i];
    }
    cout<<sum;
    return 0;
}