专栏文章
题解:B4350 [信息与未来 2025] 美味水果
B4350题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip1c2j9
- 此快照首次捕获于
- 2025/12/03 04:33 3 个月前
- 此快照最后确认于
- 2025/12/03 04:33 3 个月前
B4350 [信息与未来 2025] 美味水果
题解
本题是一道很好的递归练习题。
题意:给定 ,下面 个数,代表初始的水果好吃度。随后每天吃一个水果,剩下水果好吃度在第二天变成前一天的
。求最大好吃度。
首先定义一个变量 ,然后定义数组,输入数组的量:
CPP int n;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];
}
然后在定义一个函数:
CPPbool cmp(int x,int y){
return x>y;
}
作用是让 函数从大到小排。
CPPsort(a+1,a+n+1,cmp);
接着定义一个递归函数:
CPPint xxx(int xx,int yy){
int num=xx;
int o=yy;
num=sqrt(num);
o--;
if(num==1) return num;
if(o==1) return num;
else xxx(num,o);
}
因为已经排序完毕,所以只需要把第 个数开根 次就可以了。
注意:需特判 是否等于 。
其中 是用来开根的, 是用来记录次数。
CPPint sum=a[1];
for(int i=2;i<=n;i++){
a[i]=xxx(a[i],i);
sum+=a[i];
}
是用来把最大的好吃度加起来。
完整代码:
CPP#include<bits/stdc++.h> //万能头
using namespace std;
bool cmp(int x,int y){
return x>y;//从大到小排
}
int xxx(int xx,int yy){
int num=xx;
int o=yy;//次数
num=sqrt(num);//开根
o--;
if(num==1) return num;//特判
if(o==1) return num; //判断次数是否到了
else xxx(num,o);
}
int main(){
int n;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];//输入
}
sort(a+1,a+n+1,cmp);
int sum=a[1];
for(int i=2;i<=n;i++){
a[i]=xxx(a[i],i);
sum+=a[i];//加和
}
cout<<sum;//输出
return 0;//圆满完成
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...