有c++和pascal标程,看不懂,随便解释哪个程序都行.【问题描述】对于正整数N,则1到N这N个数可以构成N!种排列,把这些排列按照字典序从小到大列出.如N=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/26 03:07:36
![有c++和pascal标程,看不懂,随便解释哪个程序都行.【问题描述】对于正整数N,则1到N这N个数可以构成N!种排列,把这些排列按照字典序从小到大列出.如N=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排](/uploads/image/z/13620874-58-4.jpg?t=%E6%9C%89c%2B%2B%E5%92%8Cpascal%E6%A0%87%E7%A8%8B%2C%E7%9C%8B%E4%B8%8D%E6%87%82%2C%E9%9A%8F%E4%BE%BF%E8%A7%A3%E9%87%8A%E5%93%AA%E4%B8%AA%E7%A8%8B%E5%BA%8F%E9%83%BD%E8%A1%8C.%E3%80%90%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0%E3%80%91%E5%AF%B9%E4%BA%8E%E6%AD%A3%E6%95%B4%E6%95%B0N%2C%E5%88%991%E5%88%B0N%E8%BF%99N%E4%B8%AA%E6%95%B0%E5%8F%AF%E4%BB%A5%E6%9E%84%E6%88%90N%21%E7%A7%8D%E6%8E%92%E5%88%97%2C%E6%8A%8A%E8%BF%99%E4%BA%9B%E6%8E%92%E5%88%97%E6%8C%89%E7%85%A7%E5%AD%97%E5%85%B8%E5%BA%8F%E4%BB%8E%E5%B0%8F%E5%88%B0%E5%A4%A7%E5%88%97%E5%87%BA.%E5%A6%82N%3D3%E6%97%B6%2C%E5%88%97%E5%87%BA1+2+3%2C1+3+2%2C2+1+3%2C2+3+1%2C3+1+2%2C3+2+1%E5%85%AD%E4%B8%AA%E6%8E%92)
有c++和pascal标程,看不懂,随便解释哪个程序都行.【问题描述】对于正整数N,则1到N这N个数可以构成N!种排列,把这些排列按照字典序从小到大列出.如N=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排
有c++和pascal标程,看不懂,随便解释哪个程序都行.
【问题描述】
对于正整数N,则1到N这N个数可以构成N!种排列,把这些排列按照字典序从小到大列出.
如N=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列.
现在,给你排列{Pi},请你计算它后面的第K个排列{Qi}.
注意:这N!个排列是循环的,例如3 1 2后面的第2个排列是1 2 3.
【输入文件】
\x05两行,按如下格式:
N,k 意义如题
n的一个排列,两个数间空格隔开
【输出文件】
\x05一行,按如下格式输出所求排列:
所求排列P1~pn,两个数间空格隔开
【输入样例】
3 2
1 3 2
【输出样例】
2 3 1
【数据规模】
\x05四类测试点
类别\x05数量\x05数据描述
1\x053\x051
有c++和pascal标程,看不懂,随便解释哪个程序都行.【问题描述】对于正整数N,则1到N这N个数可以构成N!种排列,把这些排列按照字典序从小到大列出.如N=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排
表示看程序很头大,但我可以给你一个很清晰的算法:
· 从后往前找,直到找到序列第一次下降为止,找到k,在第i位.
· 从该位置向后找,找到最小一个比改为数字大的数字,找到m,在第j位.
· 交换k, m这两个数字.
· 将排列的第i+1位到末尾倒转,即得到了下一个排列.
具体细节和程序实现(pascal)见:http://www.clarkok.com/blog/?p=134