【蓝桥杯】BASIC-21 VIP试题 Sine之舞 (JAVA)

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述

最近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 , 假设有:
sin(1–sin(2+sin(3–sin(4)))) ,拆分为sin(4))))sin(3-sin(2+
对于an,假设有:
(A1+2)A2+1 拆分为((A1+2)A2 + n -1
【java】

public class Main{
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		int n = sc.nextInt();
		sn(n , n);
	}
	// 输出sn
	public static void sn(int  n , int i) {
		// 首先输出括号内的内容
		if(n == i) { // 首先拼接的是左边的部分 
			for(int j = 1; j < n;j ++)
				System.out.print("(");
			an(n - i + 1 , 1);
			System.out.print("+" + i);
		} else if(i > 0) {
			System.out.print(")");
			an(n - i + 1 , 1);
			System.out.print("+" + i);
		}else 
			return;
		sn(n , i - 1);
	}
	//输出 an
	public static void an(int n ,int i ) {
		if(n == i) { //第n项的输出
			System.out.print("sin(" + n);
			for(int j = 0; j < n; j++) 
				System.out.print(")");
			return;
		}else { // 对 第 i项进行拼接
			System.out.print("sin(" + i + ((i & 1) == 0 ? "+" : "-"));
		}
		an(n , i + 1);
	}
}

你可能感兴趣的:(蓝桥杯)