终于更新大家期待已久的信息学奥赛内容了,其实因为信息学奥赛内容其实不是特别受粉丝欢迎,所以我更新的异常慢,今天我抽出时间更新一下吧!
F函数目前是OJ网站里面(jsswoj.com)第一道题,所以我来给大家讲解一下,并且用不同语言来做出来
题目描述
已知,输入x和n的值,计算f(x,n)的值。
输入
一行两个数x和n,其中x是实数,n是整数。1<=x,n<=20。
输出
输出f(x,n)的值,答案保留两位小数。
样例输入
4.2 10
样例输出
3.68
这道题其实非常简单(把我弟难倒了),其实题目都已经提示了,这不明摆着要用函数吗,所以我们先推断一下主要思维
其实那张图可以代表一切,需要用到cmath头文件,然后再用return代去计算
图里面那个大大的对号其实意思是X的根
然后我们看一下C++的AC代码
#include<cstdio>
#include<cmath>
using namespace std;
double x;
int n;
double solve(double x,int n){
if(n == 1)
return 1 + x;
else
return n + sqrt(solve(x,n - 1));
}
int main()
{
scanf("%lf%d",&x,&n);
double ans = solve(x,n);
printf("%.2lf",sqrt(ans));
return 0;
}
但是作为王的男人,不能局限于一种语言,于是我用C++11的来编写
#include<cstdio>
#include<cmath>
using namespace std;
double dg(int n,double x)
{
if(n==1)
return sqrt(1+x);
else
return sqrt(n+dg(n-1,x));
}
int main()
{
double x;
int n;
scanf("%lf %d",&x,&n);
printf("%.2lf",dg(n,x));
return 0;
}
然后再用Pascal语言去编写
var
b,i:longint;
a,s:real;
begin
readln(a,b);
s:=a;
for i:=1 to b do
s:=sqrt(s+i);
writeln(s:0:2);
end.