题解:B4350 [信息与未来 2025] 美味水果
B3450 题解:
主要思路:
- 将序列从大到小排序。
- 递归求解当前值的平方根。
- 求和输出。
代码实现:
定义一个数组 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;
}