[蓝桥杯][基础练习]Sine之舞、Python

问题描述

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

规律

A1 = sin(1)
A2 = sin(1-sin(2))
A3 = sin(1-sin(2+sin(3)))
S1 = sin(1)+1
S2 = (sin(1)+2)sin(1-sin(2))+1
S3 = ((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1
Sn = 开始的 “(” +A1+n +")" + A2+n+")" +…

代码(Python)

#递归计算An
def An(i,n):
	#递归的结束条件
	if i == n:
		return 'sin('+str(n)+')'
	else:
		if i%2==0:
			return 'sin('+str(i)+'+'+An(i+1,n)+')'
		else:
			return 'sin('+str(i)+'-'+An(i+1,n)+')'
def Sn(n):
	s = ''
	# 最左边括号的数量
	for i in range(n-1):
		s += '('
	#Sn = 开始的 "(" +A1+n +")"       + A2+n+")" +..
	for i in range(1,n+1):
		s += An(1,i)
		s += '+'
		s += str(n-i+1)
		if i != n:
			s += ')'
	return s
n = eval(input())
print(Sn(n))

你可能感兴趣的:(算法,python)