> 文章列表 > 河南工程学院2.17蓝桥杯培训

河南工程学院2.17蓝桥杯培训

河南工程学院2.17蓝桥杯培训

乘法口诀数列:https://www.acwing.com/problem/content/3466/

 

剪绳子:https://www.acwing.com/problem/content/68Sin

SinSine之舞:http://lx.lanqiao.cn/problem.page?gpid=D5272

数列:https://www.acwing.com/problem/content/430/

1,乘法口诀

河南工程学院2.17蓝桥杯培训

 这道题没有多大难度,纯模拟即可

i++ 即后加加,原理是:先自增,然后返回自增之前的值
++i 即前加加,原理是:先自增,然后返回自增之后的值

#include <bits/stdc++.h>
using namespace std;
int m;
int a[1010].
int main(){int a1,a2,ans=0;cin>>a1>>a2>>m;a[0]=a1,a[a2.ans=a1*a2;for(int i=2,j=1;i<m;j++,i++){if(ans<10)  a[i]=ans;else{a[i]=ans/10;a[++i]=ans%10;}ans=a[j]*a[j+1];}for(int i=0;i<m;i++)cout<<a[i]<<" ";return 0;
}

 2,剪绳子

河南工程学院2.17蓝桥杯培训

 这道题用到的算法是浮点二分,需要找到最优解,但是如果直接做会比较麻烦,但可以用二分寻找答案,可以先设一个满足条件的X(是这道题具有判断性),然后确定是不是最优的

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,m;
bool check(double mid){int cnt=0;for(int i=0;i<n;i++){cnt+=a[i]/mid;//向下取整}return cnt>=m;//,满足条件返回true
}
int main(){scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&a[i]);double l=0.0,r=1e9;while(r-l>1e-4)//最小精度{double mid=(l+r)/2;.//注意与整数二分的区别if(check(mid))l=mid;else r=mid;}printf("%.2lf\\n",l);
}

3,Sine之舞

河南工程学院2.17蓝桥杯培训

 这道题主要考察递归算法和递推思想,是有点难度的,需要确定An,Sn,且Sn递归中包括An递归,

A1=sin(1);

A2=sin(1-sin(2)),

S1=A1+1

S2=(A1+2)A2+1

#include <bits/stdc++.h>
using namespace std;
void An(int i,int n){if(i==1)cout<<"sin("<<i<<")";else{if(i%2==0){cout<<"sin("<<i<<"+";An(i+1,n);cout<<")";}else{cout<<"sin("<<i<<"-";An(i+1,n);cout<<")";}}
}
void Sn(int n,int i){if(n==1){An(1,n);cout<<"+"<<i;}else{cout<<"(";Sn(n-1,i+1);cout<<")";An(1,n);cout<<"+"<<i;}
}
int main()
{int n;cin>>n;Sn(n,1);return 0;
}