蓝桥杯基础训练VIP - 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


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

猜你喜欢

转载自blog.csdn.net/sinat_38617018/article/details/79546739