【算法】——基础练习 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
 
思路:
先递归打印出An,在打印的时候需要判断每次递归进去的n是为奇数还是偶数,因为An涉及到+-的符号问题,所以这里就多一个参数flag对n的奇偶性进行判定最后再递归打印完了之后打印出n个右括号
再递归打印出Sn(在Sn中调用An),这里涉及一个最后是1的时候右括号没有,所以在原本的基础上,需要判断,如果最开始我需要的Sn,就是S1的话,那么在递归的出口处就需要说明不打印),如果是递归到n==1的时候就打印),这里就多传入一个max进行对键盘输入n的保存,以便比较
#include<stdio.h>
void printAn(int n);
void printAn2(int n);
void printAn3(int n,int flag);
void printAn(int n);
void printSn2(int n,int max);
void printSn(int n,int max);
int main()
{
    int n;
    scanf("%d",&n);
    int max=n;
    printSn(n,max);
    return 0;
 } 
 
 void printAn(int n)
 {
     int i;
     printAn2(n);
    //循环打印出An对应的右括号
    for(i=0; i<n; i++)
    printf(")");
 }
 
 void printAn2(int n)
 {
     int flag=n%2;
     printAn3(n,flag);
 }
 
 void printAn3(int n,int flag)
 {
     char c;
     if(n==1)
     {
         printf("sin(1");
         return;
     }
     if(flag==0)
     {
         c='-';
     }
     else if(flag)
     {
         c='+';
     }
    printAn2(n-1);
    printf("%csin(%d",c,n);    
 }
 //上面是递归打印An;
 //下面该递归打印Sn
 void printSn(int n,int max)
 {
     int i;
     //在前面循环打印出An对应的左括号
    for(i=0; i<n-1; i++)
    printf("(");
     printSn2(n,max);
  } 
void printSn2(int n,int max)
{
      if(n==1)
      {
          printAn(1);
          //在递归的时候要考虑如果原本最开始的n就是1的情况的括号问题 
          if(max=n=1)
          {
              printf("+%d",max);    
          }
          else if(max!=1)
          {
              printf("+%d)",max);
          }
      }
      else
      {
          printSn2(n-1,max);
          printAn(n);
          if(max-n+1!=1)
          {
              printf("+%d)",max-n+1);
        }
        else if(max-n+1==1)
        {
            printf("+1");
        }
    }
 }

 

posted @ 2020-03-13 10:26  美好事物  阅读(316)  评论(0编辑  收藏  举报