蓝点杯选拔赛试题及参考答案.docx
- 文档编号:11098607
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:10
- 大小:27.38KB
蓝点杯选拔赛试题及参考答案.docx
《蓝点杯选拔赛试题及参考答案.docx》由会员分享,可在线阅读,更多相关《蓝点杯选拔赛试题及参考答案.docx(10页珍藏版)》请在冰豆网上搜索。
蓝点杯选拔赛试题及参考答案
蓝点杯选拔赛试题
一、排序。
随机输入n个整数,从小到大输出这n个数,n由用户输入。
输入样例:
5
83521
输出
12358
二、全排列,输入n,输出1,2,3……,n的所有可能的排序(n<10)
输入样例:
3
输出
123
132
213
231
312
321
三、利用公式sinx=
编写一个求正弦函数值的函数,原型为doubleSine(doublex)
四、利用递归计算Fibonacci数的第n项,Fibonacci数的递归公式为:
F0=F1=1,Fn=Fn-2+Fn-1
五、S(p,k)表示将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。
输入p和k,输出S(s,k)。
样例:
输入53
输出25
提示:
第一个物体单独成为一个集合,或者与别的物体同在一个集合中。
要求只能用java或者C++实现。
第一题在C++中要求用到动态分配空间。
下面附上我自己做的答案,仅供参考
1、
#include
usingnamespacestd;
voidsort(intx[],intlength)
{
for(inti=0;i { for(intj=0;j { inttemp=0; if(x[j]>x[j+1]) { temp=x[j]; x[j]=x[j+1]; x[j+1]=temp; } } } } voidputout(inty[],intlength) { for(inti=0;i { cout<<""< } cout< } intmain() { int*nums; intn; cout<<"请输入整数个数n! "< cin>>n; nums=newint[n]; cout<<"请输入这"< "< for(inti=0;i { cin>>nums[i]; } cout<<"结果为: "< sort(nums,n); putout(nums,n); deletenums; return0; } 2、 #include usingnamespacestd; intGetcount(intx)//求每次确定第一个数字后要循环的次数 { intresult=1; for(inti=1;i<=x;i++) { result=result*i; } returnresult/x; } //传入数组名,将输出的第一个数字,数组大小n,确定一个数字作为开头后需要循环交换的次数 voidFull_permutation(intnums[],inty,intn,intcount) { if(y>n) return; nums[0]=y; for(inti=1;i { if(y+i==n) { nums[i]=y+i; } else { nums[i]=(y+i)%n; } } //先输出第一行 for(intw=0;w { cout<<""< } cout< //循环输出其他行 inttemp1=n-1,temp2=n-2; for(intj=0;j { if(temp2==0)//temp2减到第一个数字处时就重新从最后一个数字开始交换 { temp1=n-1; temp2=n-2; } inttemp; temp=nums[temp1]; nums[temp1]=nums[temp2]; nums[temp2]=temp; for(intk=0;k { cout<<""< } cout< temp2--; temp1--; } Full_permutation(nums,y+1,n,count); } intmain() { int*nums; intn; cout<<"请输入一个正整数n! "< cin>>n; nums=newint[n]; for(inti=0;i { nums[i]=i+1; } cout<<"全排列的结果为: "< Full_permutation(nums,1,n,Getcount(n)); return0; } 3、 #include #include usingnamespacestd; doubleSine(doublex) { inttemp=1; doubletempresult=0; for(inti=0;i<10000;i++) { for(intj=2*i+1;j>=1;j--)//求(2n+1)的阶乘 { temp=temp*j;//获取分母 } tempresult+=pow(-1,i)*pow(x,2*i+1)/temp; if(tempresult>1e-20) break; } returntempresult; } intmain() { doublerandian,result; cout<<"请输入度数值! "< cin>>randian; constdoublePI=3.1415926; inttemprandian=(int)(randian);//取整数部分 inttemprandian1=temprandian%360; doublerandian1=randian-temprandian+temprandian1;//去掉超过360以外的部分 randian=randian1; cout< result=Sine(randian*PI/180); cout<<"sin("< return0; } 4、 #include usingnamespacestd; intFibonacci(intx) { if(x==0||x==1) return1; returnFibonacci(x-1)+Fibonacci(x-2); } intmain() { intn; cout<<"请输入一个非负整数n! "< cin>>n; intresult=Fibonacci(n); cout<<"斐波那契函数的第"< "< return0; } 5、 #include usingnamespacestd; intFun(intp,intk) { if(k==0&&p>=1) { return0;//条件1、如果物体数大于等于1个,划分的集合数为0个,则划分的方法数为0 } elseif(p>0&&k>0&&k==p) { return1;//条件2、如果物体个数和集合数都大于0并且相等则方法数只有一种 } else { //递归: 可分为两种情况(一、将p-1个物体划分成k个集合,然后把第一个物体随机插入其中一个集合中。 //那么,有k*Fun(P-1,K)种方式;二、将第一个物体单独放一个集合中,剩下的p-1个物体划分成k-1个 //个集合,那么,有Fun(p-1.k-1)中方式。 加起来就是下式) returnk*Fun(p-1,k)+Fun(p-1,k-1); } } intmain() { intp,k; cout<<"请输入物体的个数! "< cin>>p; cout<<"请输入要将这"< "< cin>>k; cout<<"将"< "< cout< return0; } 说明: 以上程序属于个人所做,仅供参考,其中的代码并不是那么的健壮,欢迎各位指正! 程序运行效果及和我的联系方式,请看:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝点杯 选拔赛 试题 参考答案
![提示](https://static.bdocx.com/images/bang_tan.gif)