[题记]Sine之舞-蓝桥杯

题目:Sine之舞

最近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和Sn的构造函数即可。

An:

  1. 输出一个 “ sin( ”
  2. 输出一个数字 i
  3. 根据i的奇偶来输出 ‘+’ 或 ‘-’
  4. 输出一个 ‘ ) ’

Sn:

  1. 输出一个 ‘ ( ’
  2. 输出An
  3. 输出一个字符 ‘)’ 和数字 i
  4. 根据 i 来判断是不是到最后从而停止输出字符 ‘)’

最后输出一个回车符即可。

 

代码(c++):

#include 
using namespace std;

void An( int n , int i) {
    if( n == 0 ) return ;
    //输出字符串和数字 i 
    cout << "sin(" << i;
    //根据 i 的奇偶输出 + - 
    if( n != 1 ) {
        if( i % 2 == 0 ) cout << '+';
        else cout << '-';
    }
    An( n - 1, i + 1 );
    //输出字符 
    cout << ')'; 
}

void Sn( int n, int i ) {
    if( n == 0 ) return ;
    //输出字符 
    if( n != 1 ) cout << '(';
    
    Sn( n - 1, i + 1 );
    //输出An和+和数字i 
    An( n, 1 );
    cout << '+' << i;
    //根据i判断是够输出字符 ( 
    if( i != 1 ) cout << ')';
}

int main() {
    int n;
    cin >> n;
    Sn( n, 1 );
    cout << '\n';
    return 0;
} 

2020-04-04-16:22:44

 

 

 

 

你可能感兴趣的:([题记]Sine之舞-蓝桥杯)