蓝桥杯 BASIC-21 VIP试题 Sine之舞
试题 基础练习 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的完整表达式,以方便奶牛们做题。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
// Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
// A(n)
// 首先是输出A(n):
// A(1) = sin(1)
// A(2) = sin(1-sin(2))
// A(3) = sin(1-sin(2+sin(3)))
// 注意i从1到n每次一定要输出sin(i,然后根据i的奇偶性输出+或-号。
// 最后输出n个右括号即可。
// S(n)
// 输出S(n):
// S(1) = A(1)+1
// S(2) = (A(1)+2)A(2)+1
// S(3) = ((A(1)+3)A(2)+2)A(3)+1
// …
// 首先输出n-1个左括号
// 然后仍然是i从1到n, 每次输出A(i)+(n-i+1),如果i不等于n,输出一个右括号(最后没有右括号)
Scanner scanf = new Scanner(System.in);
// 输入长度
int N = scanf.nextInt();
// 调用递归
printS(N);
}
// 输出A
static String printA(int n) {
String s = "sin(1" ;
String right = ")";
for (int i = 2; i <= n; i++) {
s += (i & 1) == 1 ? "+sin(" + i : "-sin(" + i;
right += ")";
}
return s + right;
}
// 输出S
static void printS(int n) {
String a = "";
for (int i = 1; i <= n; i++) {
a = "(" + a + printA(i) + "+" + (n - i + 1) + ")";
}
System.out.println(a.substring(1, a.length() - 1));
}
}
- 点赞
- 收藏
- 关注作者
评论(0)