问题描述
最近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
分析:模拟,用Sn方法嵌套An方法,跟着例子来...
import java.util.Scanner; public class SineDance { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.close(); System.out.println(sn(n)); } public static String an(int q) { String string = ""; for (int i = 1; i <= q; i++) { if (i == q) { //如果i == q 已经到了最后 那么就没有加号和减号了 string += "sin(" + i; for (int j = 1; j <= q; j++) { //把之前欠的括号补齐 string += ")"; } } else { if (i % 2 == 0) { //偶数 + 奇数 - string += "sin(" + i + "+"; } else { string += "sin(" + i + "-"; } } } return string; } public static String sn(int n) { String string = ""; int w = 1; for (int i = n; i >= 1; i--) { if (i == n) { //如果是第一个 则要加上n-1个左括号 for (int j = n; j > 1; j--) { string += "("; } string += an(w) + "+" + i; //第一个不打右括号 w ++; } else { string += ")" + an(w) + "+" +i; //每个的下一个把上一个的右括号补上 w ++; } } return string; } }ps:这几天做题一点感觉没有...难得一点都不会 一点都想不出来... 感觉自己真的好蠢,感觉自己不适合算法!