YOJ Sine之舞 题解

原题目地址

问题描述

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

样例代码

/*
关于sprintf函数的介绍:
(来自CSDN,那些大佬比我了解得多。)

srpintf()函数的功能非常强大:
效率比一些字符串操作函数要高;
而且更具灵活性;
可以将想要的结果输出到指定的字符串中,
也可作为缓冲区,
而printf只能输出到命令行上
*/
#include   
#define N 200000  
int main()  
{  
    char* sinA = "sin(%d%s%s)";  
    char* Sa = "%s+%d";  
    char* S = "(%s)%s";  
    char An[N] = "sin(1%s%s)", An2[N], An3[N], Sn[N] = "sin(1)+%d", Sn2[N];  
    int i, j, n;  
    scanf("%d", &n);  
    sprintf(Sn2, Sn, n);  
    strcpy(Sn, Sn2);  
    for (i = 2; i <= n; i++)  
    {  
        sprintf(An2, An, i % 2 == 0 ? "-" : "+", sinA);  
        strcpy(An, An2);  
        sprintf(An2, An, i, "%s", "%s");  
        strcpy(An, An2);  
        sprintf(An2, Sa, An, n - i + 1);  
        sprintf(An3, An2, "", "");  
        sprintf(Sn2, S, Sn, An3);  
        strcpy(Sn, Sn2);  
        sprintf(Sn2, Sn, n - i+ 1);  
        strcpy(Sn, Sn2);  
    }  
    printf("%s", Sn);  
    return 0;  
}
暂无评论

发送评论 编辑评论

上一篇
下一篇