ZOJ 1318 (第k个序列,简单数学题)
来源:互联网 发布:软件自动化测试ppt 编辑:程序博客网 时间:2024/06/01 07:30
解题思路: 输入k后让k--,即把原本的(1,2,…n)视为第0个序列。
举例说明以下程序:
5 1
23
k--后为22
mark原本全为0,- - - - - (mark从1到5原本都为0)
22/4! =0
余22/3! =3
余4/2! =2
余0/1! =0
余0
根据每次除得的结果t:0,3,2,0,0,对mark进行标记
对t从前至后找到t个没标记的mark,将第t+1个标记
1 - - - -
1 - - - 1
1 - - 1 1
1 1 - 1 1
1 1 1 1 1
输出结果为1 5 4 2 3
下面我们翻过来证明一下,1 5 4 2 3是n=5时的第22个序列(假定1 2 3 4 5是第0个)
k= 0*4! +3*3! +2*2! +0*1! +0*0! = 22
代码:
#include<stdio.h> #include<string.h> int main() { int n,m,i,j,con; int mark[22]; __int64 jie[22],k,t; jie[1]=1; for(i=2;i<=20;i++) jie[i]=i*jie[i-1]; while(scanf("%d%d",&n,&m)!=EOF) { while(m--) { scanf("%I64d",&k); k--; memset(mark,0,sizeof(mark)); for(i=1;i<=n;i++) { t=k/jie[n-i]; con=0; for(j=1;j<=20;j++) { if(mark[j]==0) con++; if(con==t+1) { printf("%d",j); mark[j]=1; break; } } putchar(i==n?'\n':' '); k%=jie[n-i]; } } } return 0; }
0 0
- ZOJ 1318 (第k个序列,简单数学题)
- 第k个序列,简单数学题(转东山)
- nefu1121第k个序列(dfs)
- zoj 3212 K-Nice(数学题)
- Home_W的超级数学题(第k个和m互素的数
- Permutation Sequence 求第k个的排列序列 @LeetCode
- Permutation Sequence 排列序列-第K个排列
- 取当前字符串中第k个单词(简单)
- poj 1037 DP 求波浪序列中按字典序排列的第k个序列
- 第K个排列组合
- 第k个排列
- ZOJ 3612 树状数组 第K大数
- 简单数学题
- 简单数学题
- leetcode:Permutation Sequence (顺序排列第k个序列) 【面试算法题】
- 求后序遍历序列的第k个结点值(二叉树)
- 在二叉树中求位于先序序列中第k个位置的结点的值
- 每日算法之四十二:Permutation Sequence (顺序排列第k个序列)
- 总结_ACM 之歌
- hdu 1846 (简单博弈题)
- hdu 1422 DP
- hdu 1098 多项式整除问题
- MyEclipse 关闭debug
- ZOJ 1318 (第k个序列,简单数学题)
- 俗话说。。俗话又说。。
- 设计模式学习之策略模式
- hdu 3469 (tju 3552) Catching the Thief 博弈 数学题
- hdu 3471 (tju 3554) England vs Germany (计算几何)
- 混合图的欧拉回路
- 理解透彻--802.1d,802.1w,802.1s与802.1q
- hdu3472 (tju3555) HS BDC (混合图的欧拉回路)
- JSP技术详解