蓝桥杯练习系统之基础训练Java版(2-21)—— Sine之舞

蓝桥杯练习系统之基础训练Java版(2-21)—— 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

代码如下:

import java.util.Scanner;

public class Main {

    static void printA(int n, int k)
    {
        if (n == k)
            System.out.print("sin("+ n +")");           //还没到 n时,)就不会添加,即不会闭合:()
        else
        {
            System.out.print("sin(" + n);
            System.out.print(n % 2 == 0 ? "+" : "-");   // 这是探索出来的规律,sin(?)里面的偶加奇减
            printA(n + 1, k);
            System.out.print(")");
        }
    }
    static void printB(int n, int k)
    {
        if (n != 1) {       // 如果 n等于 3,则要赋给 n-1个 (     以此类推...
            System.out.print("(");
            printB(n - 1, k);       // 递归完成的时候,最左边的 (  已经完成
            System.out.print(")");     // 这里用于添加 sin(1)+n) 中 n右边的 )
        }
        printA(1, n);    // n 已经等于 1的时候,执行此步骤
        System.out.print("+" + (k - n));
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();      // 3
        printB(n, n + 1);       //利用递归
        System.out.print("\n");    //输出换行符
    }
}

希望能对您有帮助!谢谢。(这道题练习递归,极有好处!测试递推能力的一道题)

你可能感兴趣的:(蓝桥杯,字符串,java,算法,数据结构)