第几是谁?

2024-06-16 19:32
文章标签 第几

本文主要是介绍第几是谁?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第几是谁?

描述

现在有”abcdefghijkl”12个字符,将其按字典序排列,如果给出任意一种排列,我们能说出这个排列在所有的排列中是第几小的。但是现在我们给出它是第几小,需要你求出它所代表的序列.

输入第一行有一个整数n 0<n<=10000 ( 0 < n <= 10000 )
随后有n行,每行是一个整数m,它代表着序列的第几小;输出输出一个序列,占一行,代表着第m小的序列。

样例输入

3
1
302715242
260726926

样例输出

abcdefghijkl
hgebkflacdji
gfkedhjblcia

思路

这是一个康托逆展开,与康托展开可以互相对应求出,如果不清楚可以看我的另一篇博客,康托展开例题

例1 {1,2,3,4,5}的全排列,并且已经从小到大排序完毕
(1)找出第96个数
首先用96-1得到95
用95去除4! 得到3余23
有3个数比它小的数是4
所以第一位是4
用23去除3! 得到3余5
有3个数比它小的数是4但4已经在之前出现过了所以第二位是5(4在之前出现过,所以实际比5小的数是3个)
用5去除2!得到2余1
有2个数比它小的数是3,第三位是3
用1去除1!得到1余0
有1个数比它小的数是2,第二位是2
最后一个数只能是1
所以这个数是45321
(2)找出第16个数
首先用16-1得到15
用15去除4!得到0余15
用15去除3!得到2余3
用3去除2!得到1余1
用1去除1!得到1余0
有0个数比它小的数是1
有2个数比它小的数是3 但由于1已经在之前出现过了所以是4(因为1在之前出现过了所以实际比4小的数是2)
有1个数比它小的数是2 但由于1已经在之前出现过了所以是3(因为1在之前出现过了所以实际比3小的数是1)
有1个数比它小得数是2 但由于1,3,4已经在之前出现过了所以是5(因为1,3,4在之前出现过了所以实际比5小的数是1)
最后一个数只能是2
所以这个数是14352
引用自百度百科

本题代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>using namespace std;long long int fact(int n)
{return !n?1:n*fact(n-1);
}int main()
{char ch[13] ="abcdefghijkl";int len = 12;long long int n,m;cin>>n;string str = "";while(n--){cin>>m;m--;long long int t;vector<char> v;for(int i = 0; i < len ; i ++){v.push_back(ch[i]);}for(int i = 1; i <= len; i++){//cout << fact(len-i) << endl;t = m/fact(len-i);//cout << m<<" "<<t << endl;str += v[t];v.erase(v.begin()+t);m %= fact(len-i);}//str+=v[0];cout << str << endl;str = "";}return 0;
}

这篇关于第几是谁?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067342

相关文章

题目:有 n 个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位。

题目:有 n 个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到 3 的人退出圈子,问最后最后留下的是原来第几号的那位。 提示:用数组完成 import java.util.ArrayList;import java.util.List;import java.util.ListIterator;import java.util.Scanner;public class D

两个月冲刺软考——求解关系模式达到了第几范式题型(例题+讲解,一看就会)

目录 1.假设一对多联系不转换为一个独立的关系模式的话,那么生成的关系模式应该是将“一”的那一方的主键加入到“多”的一方的关系模式中。 2.求解关系模式达到了第几范式题型 1.假设一对多联系不转换为一个独立的关系模式的话,那么生成的关系模式应该是将“一”的那一方的主键加入到“多”的一方的关系模式中。 例如:目前有两个实体:学生和院系,一个院系可以有多名学生,但是一个学生只能是属于一个院

赠书 | 2021年中国数字政府发展指数排名出炉!你的家乡名列第几?

文中有数据派THU福利哦 我国的数字政府发展在全球范围内处于何种水平?各省市的数字政府发展态势及排名如何?在我国的政府数字化建设中又有哪些经典案例?如何开展我国数字政府发展实践的理论提升?近日,清华大学数据治理研究中心出版发布的《中国数字政府发展研究报告(2021)》对这些问题进行了充分的探讨与解答。 《中国数字政府发展研究报告(2021)》一书,根据清华大学数据治理研究中心设计的原创性评估

【ZZULIOJ】1031: 判断点在第几象限(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 从键盘输入2个整数x、y值,表示平面上一个坐标点,判断该坐标点处于第几象限,并输出相应的结果。 输入 输入x,y值表示一个坐标点。坐标点不会处于x轴和y轴上,也不会在原点。 输出 输出对应的象限,用数字1,2,3,4分别对应四个象限。> 样例输入 Copy 1 1 样例输出

辽宁交通职业技术学校计算机好不好,辽宁省交通高等专科学校怎么样 全国排名第几...

辽宁省交通高等专科学校坐落于历史文化名城沈阳,是为新中国交通建设而设立的第一所专门学校。辽宁省交通高等专科学校在全国高职高专院校排行榜中,排名第25位。 2020辽宁省交通高等专科学校排名排名院校名称地区类型序 20成都航空职业技术学院四川8 21芜湖职业技术学院安徽11 22武汉职业技术学院湖北12 23宁波职业技术学院浙江9 24黄河水利职业技术学院河南13 25辽宁省交通高等专科学校辽宁

2023年快结束了,来看看你使用的编程语言在排行榜上排名第几?

【关注微信公众号:跟强哥学SQL,回复“笔试”免费领取大厂SQL笔试题。】 废话不多说,直接上图(双击图片查看大图): 这张编程语言排行榜来源于tiobe.com网站,根据TIOBE编程社区指数进行排名,展示了各种编程语言在全球范围内的最新使用情况。 TIOBE公司是软件质量评估和编程语言流行度的领先提供商。而该网站是TIOBE(The Importance of Being Ear

33关Python游戏,你能闯到第几关?

导读:最近在网上看到一个非常有意思的 Python 游戏通关网站,一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。很考验对 Python 的综合掌握能力,比如有的闯关需要用到正则表达式,有的要用到爬虫。 我们平常学 Python 都是按章节顺序、包或者模块来学,容易前学后忘。正好可以拿这个网站来综合测试一下对 Python 的掌握情况,以便查缺补漏。

C# 怎么判断屏幕是第几屏幕?屏幕是垂直还是水平?屏幕的分辨率?

一、怎么判断屏幕是第几屏幕? 可以使用System.Windows.Forms.Screen.AllScreens属性来获取所有已连接的屏幕,并根据鼠标位置或窗口的位置来判断它所在的屏幕索引。 using System;using System.Windows.Forms;// 获取鼠标当前位置所在的屏幕Point cursorPos = Cursor.Position;Screen c

vue3 el-pagination 将组件中英文‘goto’ 修改 为 中文到‘第几’

效果如图: 要求:将英文中Go to 改为到第几 操作如下: <template><div class="paging"><el-config-provider :locale="zhCn"> // 注意:这是重要部分<el-pagination //分页组件根据官网v-model:current-page="page.currentPage"v-model:page-size="pa

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

#include<iostream>using namespace std;int main() {int n;cin >> n;//输入要玩的人数int *p = new int[n];//动态创建一个大小为输入的人数的一位数组for (int i = 0; i < n; i++)p[i] = 1;//将数组内每个值都设置为1,作为还在圈内的人int k = 0;int count = 0;