基础练习 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
 
本题使用j递归进行了求解,虽然通过了测试,但代码写的不是很好。基本思路是先生成An表达式,并把它们
存放在数组中,Sn表达式的求解是在输入数据之后进行的。
import java.util.Scanner;

public class Main {
    static String [] strings = new String[202];
    static String getAn(int n){
        if(n==1){
           strings[1]= "sin(1";
           return strings[1];
        }
        else {
            if((n-1)%2==0){
                strings[n]= getAn(n-1) + "+sin(" + n;
                return strings[n];
            }
            else {
                strings[n]= getAn(n-1) + "-sin("+ n;
                return strings[n];
            }
        }
    }
    static String getSn(int n,int i){
        if(i==1){
            return "("+strings[1] + "+" + n +")";
        }
        return "("+getSn(n+1,i-1) +strings[i] + "+" + i+")";
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        getAn(200);
        for(int i=1;i<201;i++){
            for(int k=0;k<i;k++){
                strings[i]+=")";
            }
        }
        if(a==1)
            System.out.println(strings[1]+"+"+1);
        else{
            String result = getSn(2,a-1) + strings[a] + "+" +1;
            System.out.println(result);
        }

    }
}

 

posted on 2018-01-19 13:59  ZhangのBlog  阅读(228)  评论(0编辑  收藏  举报