蓝桥杯之VIP试题 Sine之舞

匿名 (未验证) 提交于 2019-12-03 00:22:01

问题描述
  最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
  不妨设

  Sn=(…(A1+n)A2+n-1)A3+…+2)An+1
  FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。
输入格式
  仅有一个数:N<201。
输出格式
  请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出

import java.util.*;  public class Main {     /**      *       1 sin(1)+1      2 (sin(1)+2)sin(1-sin(2))+1      3 ((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1      4 (((sin(1)+4)sin(1-sin(2))+3)sin(1-sin(2+sin(3)))+2)sin(1-sin(2+sin(3-sin(4))))+1      * @param args      */ //  思路:要得到Sn,就必须先得到An。像这种类型的题目,首先写出Sn、An的几个例子,然后分析其中的规律。      public static void main(String args[])     {         Scanner in = new Scanner(System.in);         int t = in.nextInt();         System.out.println(S(t));     }      public static String S(int t) // 产生Sn的函数     { //      将结果放入str中,         String str = ""; //      先确定左括号         for(int i = 1; i < t; i++)         {             str = str + "(";         }            //      定好左括号后,就先调用方法产生An         for(int i = 1, j = t; i <= t; i++, j--)         {             str = str + A(i) + "+" + j + ")"; // 期间调用产生An 的函数         }         str = str.substring(0, str.length() - 1); //      去掉多于的")",也可以用StringBuffer的形式 //      StringBuffer str2 = new StringBuffer(str); //      str2.deleteCharAt(str2.length() - 1); // 因为多产生了一个 “)”         return str;     }  //  public static StringBuffer A(int i)     public static String A(int i)     { //      存放产生的An的结果序列  //      分析找出An的规律 //      A1 = sin(1) //      A2 = sin(1-sin(2)) //      A3 = sin(1-sin(2+sin(3))) //      A4 = sin(1-sin(2+sin(3-sin(4))))         String str = "sin(";         int t = 1;         for(; t < i; t++)         {             if(t % 2 != 0)             {//若t为奇数                 str = str + String.valueOf(t) + "-sin(";             }             else             {                 str = str + String.valueOf(t) + "+sin(";             }         }         str = str + String.valueOf(t);         for(; t > 0; t--)         {             str = str + ")";         }         return str; //      下面是别人的方法,我觉得不好 //      String str = ""; //      for(int t = 1; t <= i; t++) //      { //          if(t % 2 != 0) //          { //              str = str + "+" + "sin(" + t; // 这样会使弟一项也会有一个“+” 所以后续得去掉 //          }                //          else //          { //              str = str + "-" + "sin(" + t; //          }                //      } //      for(int t = 1; t <= i; t++) //      { //          str = str + ")"; //      }            //      StringBuffer str2 = new StringBuffer(str); // 因为多产生了一个“+”号 //      str2.deleteCharAt(0); //      return str2;     }  } 

别人用了StringBuffer,我用的是String。因为我无法测试,有种猜想就是若我用的是String,内存限制那里可能会超。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!