0
点赞
收藏
分享

微信扫一扫

蓝桥杯 试题 基础练习 Sine之舞(递归)

mafa1993 2023-03-08 阅读 81


问题描述

  最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
  不妨设
  An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
  Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
  FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。

输入格式

  仅有一个数:N<201。

输出格式

  请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入

3

样例输出

((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1

解题思路:

对于An,递归模式是sin(i+An)和sin(i-An),括号最里面的是n,所有从1到n递归。

对于Sn,把A1+n看成是 ()A1+n,很容易看出递归模式是 ()An+n+i-1 ,括号最里面的是A1,所有从n到1递归。当然这是相对的,如果看成括号最里面的是n,也可以1到n递归。

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<string>
#include<cmath>
using namespace std;
int n;
string fA(int i,int N){
if(i==N)//结束递归的标志
{
string s="sin(";
s+=(i+'0');
s+=")";
return s;
}
string str="sin(";
str+=(i+'0');
if(i%2==0)
str+="+";
else
str+="-";
str+=fA(i+1,N);
str+=")";
return str;
}
string fS(int i){
if(i==1)//结束递归的标志
{
string s="sin(1)+";
s+=(n+'0');
return s;
}
string str="(";
str+=fS(i-1);
str+=")";
str+=fA(1,i);
str+="+";
str+=(n-i+1+'0');
return str;
}

int main(){
cin>>n;
cout<<fS(n);
}

 

举报

相关推荐

0 条评论