【蓝桥杯VIP】试题 基础练习 Sine之舞(Python解法+Java解法)
资源限制
时间限制: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
分析:
A1=sin(1)
S1=A1+1=sin(1)+1
A2=sin(1-sin(2))
S2=(A1+2)A2+1=(sin(1)+2)sin(1-sin(2))+1
A3=sin(1-sin(2+sin(3)))
S3=((A1+3)A2+2)A3+1=((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1
Python解法:
'''
'''
end: 默认是换行,表示两个字符串最后以什么结尾。eg: 换行 end="\n"
end="": 下次输出不换行
sep: 默认是空格,表示两个字符串之间用什么分割。eg: 空格 sep=" "
sep="": 多个输出之间没有距离
'''
# 100分
def A(n):
for i in range(1,n+1):
if i!=n:
print('sin(',i,sep='',end='')
if i%2==1:
print('-',end='')
else:
print('+',end='')
else:
print('sin(',i,sep='',end='')
for j in range(n):
print(')',end='')
return '' #防止输出出现【None】
def S():
for i in range(0,n-1):
print('(',end='')
for i in range(1,n+1):
if i!=n:
print(A(i),'+',n-i+1,')',sep='',end='')
else:
print(A(i),'+',n-i+1,sep='',end='')
return '' #防止输出出现【None】
n=eval(input())
print(S())
Java解法:
//100分
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
Solution s=new Solution();
s.S(n);
}
}
class Solution{
public void A(int n){
for(int i=1;i<=n;i++){
if(i!=n){
System.out.print("sin("+i);
if(i%2==1){
System.out.print("-");
}else{
System.out.print("+");
}
}else{
System.out.print("sin("+i);
for(int j=0;j<n;j++){
System.out.print(")");
}
}
}
}
public void S(int n){
for(int i=0;i<n-1;i++){
System.out.print("(");
}
for(int i=1;i<=n;i++){
if(i!=n){
A(i);
System.out.print("+"+(n-i+1)+")");
}else{
A(i);
System.out.print("+"+(n-i+1));
}
}
}
}