程序设计竞赛选拔赛(实训 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=1 and g=2 and h=k,则应用 s 进行记录
最终输出所得排列个数 s
(2) 程序设计// 排列数#include void main(){ int c,f,g,h,i,j,k; long b,d,s,t; printf(" 请输入数字 3 的个数 k (1≤k≤6): "); scanf("%d",&k); b=1; s=0; for(i=1;i