问题描述
最近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;
再在观看Sn基础上改进An;(注意:这里每一次都是按照从小到大的顺序)
解法:
#include <iostream>
#include<string>
using namespace std;
string num;
string num1;
string An(int i, int j, int n)
/*因为每一次这是按照从小到大的顺序,所以要变量j,也可以直接全写成数字1*/
{
/*string num1 = "0" + j;
string num1 = '0' + j; */ /*错误*/
/*num1 = "0" + j;*/
/*也可以如下表示*/
num1 = '0' + j;
string str1 = "sin(" + num1;
/*因为c++中当进行string对象和字符串字面值混合连接操作时,
+ 操作符的左右操作数必须至少有一个是string类型的*/
if (i == n)
{
return str1 + ')';
}
if (j % 2 == 0)
{
return str1 + '+' + An(i + 1, j + 1, n) + ')';
}
else
{
return str1 + '-' + An(i + 1, j + 1, n) + ')';
}
}
string Sn(int i, int j, int n)
{
num = '0' + i;
string str1 = "+" + num;
if (i == n)
{
return An(i, j, n) + str1;
}
else {
return '(' + Sn(i + 1, j, n) + ')' + An(i, j, n) + str1;
}
}
int main()
{
int N;
cin >> N;
int i = 1;
int j = 1;
string Sine = Sn(i, j, N);
cout << Sine << endl;
return 0;
}