专栏文章

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

B4350题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip1c2j9
此快照首次捕获于
2025/12/03 04:33
3 个月前
此快照最后确认于
2025/12/03 04:33
3 个月前
查看原文

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

题解

本题是一道很好的递归练习题。
题意:给定 nn,下面 nn 个数,代表初始的水果好吃度。随后每天吃一个水果,剩下水果好吃度在第二天变成前一天的 yy\to x\sqrt{x}。求最大好吃度。
首先定义一个变量 nn,然后定义数组,输入数组的量:
CPP
	int n;
	cin>>n;
	int a[n+1];
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
然后在定义一个函数:
CPP
bool cmp(int x,int y){
	return x>y;
}
作用是让 sortsort 函数从大到小排。
CPP
sort(a+1,a+n+1,cmp);
接着定义一个递归函数:
CPP
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);
}

因为已经排序完毕,所以只需要把第 ii 个数开根 ii 次就可以了。
注意:需特判 numnum 是否等于 11
其中 numnum 是用来开根的,oo 是用来记录次数。
CPP
int sum=a[1];
	for(int i=2;i<=n;i++){
		a[i]=xxx(a[i],i);
		sum+=a[i];
	}
sumsum 是用来把最大的好吃度加起来。
完整代码:
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 条评论,欢迎与作者交流。

正在加载评论...