【问题描述】
最近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
【思路分析】
要想输出Sn,我们必须先搞懂An。
1:首先看一下如何输出An,
sin(1)
sin(1–sin(2))
sin(1–sin(2+sin(3)))
……
我们定义一个变量初始化i=1;
起始输出:sin(i
如果i=N,则输出:)
如果i<N,则判断i的奇偶性;奇数(-)偶数(+)
然后i++,
见代码
void An(int i,int N){
printf("sin(%d",i);
if(i<N){
if(i%2==0){
printf("+");
}else{
printf("-");
}
An(++i,N);
}
printf(")");
}
能正确输出An后,我们来解剖Sn;
可以观察到,Sn的前面有N-1个左括号,即(
见代码
void front(int i,int N){
while(i++<N){
printf("(");
}
}
后面呢,则输出
我们依然使用上面的变量i,其初始值为1;
An+(N-i+1)
如果i<N,则输出一个右括号,即 )
见代码
void Sn(int i,int N){
An(1,i);
printf("+%d",N-i+1);
if(i<N){
printf(")");
Sn(++i,N);
}
}
下面则是总体源代码,可运行
#include<stdio.h>
#include<stdio.h>
void front(int i,int N){
while(i++<N){
printf("(");
}
}
void An(int i,int N){
printf("sin(%d",i);
if(i<N){
if(i%2==0){
printf("+");
}else{
printf("-");
}
An(++i,N);
}
printf(")");
}
void Sn(int i,int N){
An(1,i);
printf("+%d",N-i+1);
if(i<N){
printf(")");
Sn(++i,N);
}
}
int main(){
int N;
scanf("%d",&N);
if(N<1){ //<=0的话直接结束。
return 0;
}
int i=1;
front(i,N);
Sn(i,N);
return 0;
}