蓝桥杯 basic21试题 基础练习 sine之舞

这篇博客记录了作者在蓝桥杯基础练习中遇到的Sine之舞问题,详细介绍了问题描述、输入输出格式,并给出了递归和迭代的解决方案。通过分析,作者发现该问题是一个不断套娃的递归过程,最终提供了伪代码和正确代码片段,讨论了递归和迭代的效率差异。
摘要由CSDN通过智能技术生成

记录我的刷题历程

蓝桥杯 basic21试题 基础练习 sine之舞

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

最近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

思路与大致想法

由于题干给的提示是递归,字符串,于是就知道需要用递归取解决这个问题,多次去推导你会发现这是一个不断套娃的过程,所以我们需要一层层的去剥开
先来观察an
a1=sin(1);
a2=sin(1-sin(2));
a3=sin(1-sin(2+sin(3)));
1.我们可以发现下标为偶数的,增加的项都是+
而下标为奇数的,增加的项前面的符号都是-
2.每次增加的都是基于上一层的基础上的。
例如 sin(1)
在第2层中,增加的部分是-sin(2)
且增加的位置都是属于上一层下标之后,因此就很方便我们在递归中进行定位
伪代码部分

findAn(int n,string s)//n代表当前下标,s最后返回an
{
   
	if(结束条件){
   
		表示所有下标走完,获得了an
	}
		if( 偶数){
   -sin(n)加上
		dfs(n+1)//进入下一步
		}
		else{
   +sin(n)加上
		dfs(n+1)//表示下一步
		}
			}
}

相当于主干部分吧,
接着看sn
sn也是由一堆套娃组成的,因此也考虑采用递归形式,(其实可能可以用递推,但我不会)
s1=a1+1
s2=(a1+2)a2+1;
因为n一直在变化,
当n等于2时
s1=a1+2
s2=s1a2+1
当n等于3时
s1=a1+3
s2=s1a2+2
s3=s2a3+1
由于计算机只知道下标,所以后面的数字规律是
n+1-N(N表示当前层数,n表示输入的总层数)
因此
伪代码部分

sumSn(stringbuilder[] an,int n,stringBuilder s){
   
//an记录从1--n的所有子项,n表示当前层数,s表示当前层数的结果
if(m==n+1){
   
//结束就输出
}
//每层都需要做的操作
s=s+an[n-1]+m+1-n//把当前层的子项加上,还有后面数字也加上

正确代码部分(递归部分)


import java.util.Scanner;

public class Main {
   
    static Scanner scanner = new Scanner(System.in);
    static int m=scanner.nextInt();
    static int n;
    static StringBuilder a1=new StringBuilder("sin(1)");
    static StringBuilder s1=new StringBuilder("sin(1)+1");
    static StringBuilder[] an=new StringBuilder[m];
    public static StringBuilder findAn(int N,StringBuilder s){
   
        if (N==n+1) return s;
        String a=String.valueOf(N-1);
            if(N%2==0){
   
                if(s.indexOf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值