3597 - 【基础题】Sine之舞
时间限制 : 1 秒
内存限制 : 128 MB
最近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
C++解答
#include<iostream> #include<sstream> #include<cstring> #include<cstdio> #include<cstdlib> using namespace std; // 求An void An(string &an, int i, int flag, int n) { // an:字符串an // i:用于循环1-n // flag:用于记录序号 // n:题目中的n // itoa 的参数是字符类型指针,返回值是一个指针,指向的是一个字符串 // N < 201故 //char ch[4]; //itoa(i, ch, 10); // 用下面的流处理可以使代码更加清晰 stringstream stream; stream << i; string string_temp = stream.str(); //此处也可以用 stream>>string_temp an += "sin(" + string_temp; if(i < n) { // 符号 if(flag) { an += "-"; } else { an += "+"; } flag = !flag; // 递归调用 An(an, i+1, flag, n); } an += ")"; } // 求Sn void Sn(string &te, int i, int n) { // te:存储结果的字符串 // 生成该层括号内的字符串 string string_temp; An(string_temp, 1, 1, i); // 将数字转换成字符 stringstream stream; stream << n-i+1; string string_temp2 = stream.str(); //此处也可以用 stream>>string_temp string_temp += "+" + string_temp2; if(i > 1) { te = "(" + te; Sn(te, i-1, n); } // 最外层没有)符号 if(i == n) { te += string_temp; } else { te += string_temp +")"; } } int main() { string re; // 结果字符串 int n; cin >> n; // 递归从外层往里循环 Sn(re, n, n); cout << re; return 0; }