第1页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共10页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)程序设计//排列数#includevoidmain(){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