蓝桥杯---------Sin之舞---------C语言
原题链接
1,读完这道题首先出现的想法是找规律。接下来开始找规律。
2,首先求An,如果单单求An的话,我们可以把An分成两个部分,“sin(i”和“+或-”号,例如:sin(1,sin(2,sin(3中间要么是**+要么是-,这样我们用一个循环语句和一个if语句,便可以大致实现An,另外要注意右括号**的数量。从输入样例可以看出,A1=sin(1),A2=sin(1-sin(2)),A3=sin(1-sin(2+sin(3))),n为几右括号的数量就为几。求An的代码块如下:
void s1(int n)
{
int i;
for(i=1;i<=n;i++){
printf("sin(%d",i);
if(i==n)//如果i=n说明,到最后了,后边不需要带加号或者减号了
continue;
if(i%2==0)
printf("+");
else printf("-");
}
while(n--)//输出右括号
printf(")");
}
3,接着就是找Sn的规律,大体上Sn也是由两部分组成,Ai+n)和一些括号,右样例可以看出,最后没有右括号,且左括号的数量为n-1个,i从1递增,n递减。求Sn的代码块如下;
void s2(int m,int n){
s1(m);//调用Ai
printf("+%d",n);
if(n!=1)
printf(")");
}
int main(){
int n,i;
scanf("%d",&n);
for(i=1;i<=n-1;i++)//单独处理输出左括号n-i个
printf("(");
for(i=1;i<=n;i++)
s2(i,n+1-i);//实现i递加,n递减,求Sn
return 0;
}
代码实现如下:
#include <stdio.h>
#include <stdlib.h>
void s1(int n)
{
int i;
for(i=1;i<=n;i++){
printf("sin(%d",i);
if(i==n)//如果i=n说明,到最后了,后边不需要带加号或者减号了
continue;
if(i%2==0)
printf("+");
else printf("-");
}
while(n--)//输出右括号
printf(")");
}
void s2(int m,int n){
s1(m);//调用Ai
printf("+%d",n);
if(n!=1)
printf(")");
}
int main(){
int n,i;
scanf("%d",&n);
for(i=1;i<=n-1;i++)//单独处理输出左括号n-i个
printf("(");
for(i=1;i<=n;i++)
s2(i,n+1-i);//实现i递加,n递减
return 0;
}