问题描述
最近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:这几天做题一点感觉没有...难得一点都不会 一点都想不出来... 感觉自己真的好蠢,感觉自己不适合算法!