招聘面试程序设计竞赛选拔赛实训.docx
- 文档编号:5402196
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:12
- 大小:19.77KB
招聘面试程序设计竞赛选拔赛实训.docx
《招聘面试程序设计竞赛选拔赛实训.docx》由会员分享,可在线阅读,更多相关《招聘面试程序设计竞赛选拔赛实训.docx(12页珍藏版)》请在冰豆网上搜索。
招聘面试程序设计竞赛选拔赛实训
(招聘面试)程序设计竞赛选拔赛(实训)
2011程序设计竞赛选拔赛(实训8)
1、排列数
由1个“1”,2个“2”,k个“3”(1≤k≤6)能组成多少个不同的排列?
输入k,输出排列个数。
k=4,输出:
k=5,输出:
(1)设计要点
注意到1个“1”,2个“2”,k个“3”组成k+3位数,首先通过k+2个10相乘计算k+3位数的起点b=10^(k+2),为枚举提供范围t(b—4*b-1)。
为了检测k+3位数t含有多少个数字1、2、3,每个k+3位整数t赋给d(以保持t不变),然后通过k+3次求余先后分离出t的k+3个数字c:
if(c==1)f++,统计整数t中数字1的个数f;
if(c==2)g++,统计整数t中数字2的个数g;
if(c==3)h++,统计整数t中数字3的个数h。
检测每壹个k+3位整数:
若f=1andg=2andh=k,则应用s进行统计。
最后输出所得排列个数s。
(2)程序设计
//排列数
#include
voidmain()
{intc,f,g,h,i,j,k;
longb,d,s,t;
printf("请输入数字3的个数k(1≤k≤6):
");scanf("%d",&k);
b=1;s=0;
for(i=1;i<=k+2;i++)b=b*10;//计算k+3位数的起点
for(t=b;t<=4*b-1;t++)//枚举首位为3的k+3位数
{d=t;f=0;g=0;h=0;
for(j=1;j<=k+3;j++)
{c=d%10;d=d/10;
if(c==1)f++;//统计数字1的个数
if(c==2)g++;//统计数字2的个数
if(c==3)h++;//统计数字3的个数
}
if(f==1&&g==2&&h==k)s++;//统计个数s
}
printf("s=%ld\n",s);
}
(3)程序运行示例
请输入数字3的个数k(1≤k≤6):
4
s=105
请输入数字3的个数k(1≤k≤6):
5
s=168
(4)拓广
若需求k=100时的排列数,如何求?
1)注意到壹排k个“3”的空位共k+1个。
这k+1个选2个空位共C(k+1,2)种组合,每壹空位放置1个“2”。
这k+1个选1个空位共C(k+1,1)种组合,空位中放置2个“2”。
2)注意到壹排k个“3”和2个“2”的空位共k+3个。
这k+3个选1个空位共C(k+3,1)种组合,空位中放置1个“1”。
3)因而得不同的排列数为:
(C(k+1,2)+C(k+1,1))*C(k+3,1)=(k+1)*(k+2)*(k+3)/2
//排列数
#include
voidmain()
{intk;longs;
printf("请输入数字3的个数k:
");scanf("%d",&k);
s=(k+1)*(k+2)*(k+3)/2;
printf("s=%ld\n",s);
}
请输入数字3的个数k:
100
s=530553
(5)实训1
计算由2个“1”、2个“2”、k个“3”的排列数。
计算由3个“1”、2个“2”、k个“3”的排列数。
测试数据:
k=50
2、求最值
设n为正整数,,式中各项符号为二正壹负。
求当n为多大时,s(n)最接近指定的正整数a?
输入a,输出s(n)最接近a的n,s(n)。
(1)输入1000,输出:
(2)输入2011,输出:
解:
壹般地求当n为多大时,s(n)最接近正整数a?
其中a从键盘输入a。
//s(n)=1+1/(1+1/2)-1/(1+1/2+1/3)+...+1/(1+1/2+...+1/n)
#include
#include
voidmain()
{longa,n,n1;
doublem,ts,s,s1;
printf("请输入a:
");scanf("%d",&a);
n=0;ts=0;s=0;m=100000.0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 招聘 面试 程序设计 竞赛 选拔赛