`
coolsooner
  • 浏览: 1313349 次
文章分类
社区版块
存档分类
最新评论

游戏字典序问题 解题报告

 
阅读更多


描述:

在数据加密和数据压缩常需要对特殊的字串进行编码。给定的字母表A26个英文字母组成A={a,b,…,z}。该字母表产生的升序字符串指的是字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表A产生的所有长度不超过6的升序字符串按照字典序列排列并编码如下。

对于任意长度不超过6的升序字符串,迅速计算出它在上述字典中的编码。

输入:

输入为一行,一个长度不超过6的升序字符串。

输出:

输出为一行,为对应字符串的编码。注意末尾要有换行。

输入样例:

a
ac

输出样例:

1
28

解题思路:输入几个字母,先是求出它们全部的排列组合的总数,及它们达到最大的上限,由于它们是升序的,所以可以用无序的排列组合求解,接下来就是要减去多加的一些组合,例如,abc,对于第一个字母,应该是多加了b~z的那些组合,要减去它们,以及一些到最好的字母。

代码如下:

Code:
  1. #include<iostream>
  2. #include<cstdio>
  3. usingnamespacestd;
  4. intcnk(intn,intk)
  5. {
  6. inti;
  7. if(k==1)
  8. returnn;
  9. intr=n;
  10. for(i=2;i<=k;i++)
  11. r=r*(n-i+1)/i;//组合排列,因为这些数是有序的,所以可以根据公式得到
  12. returnr;
  13. }
  14. intmain()
  15. {
  16. chars[7];
  17. cin>>s;
  18. intans=0;
  19. intl=strlen(s);
  20. for(inti=1;i<=l;i++)//算出这几位数能够达到最大的排序数
  21. ans+=cnk(26,i);
  22. for(i=0;i<l;i++)//减去算多的那些数
  23. ans-=cnk(26-(s[i]-'a'+1),l-i);
  24. cout<<ans<<endl;
  25. return0;
  26. }



分享到:
评论

相关推荐

    排列的字典序问题

    问题描述:n个元素{1,2,3...n}有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,...,n!...算法设计:给定n及n个元素{1,2,...}的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。

    排列的字典序排列的字典序

    排列的字典序 Time Limit:1000MS Memory Limit:65536K Total Submit:80 Accepted:22 Description n 个元素 { 1, 2, ..., n } 有 n! 个不同的排列. 将这 n! 个排列按字典序排列, 并编号为 0, 1, …, n!-1. 每个...

    排列的字典序问题「Permrank」题解

    排列的字典序问题「Permrank」题解

    字典序问题

    在数据压缩和数据加密过程中常需要对特殊的字符串进行编码. 给定的字母表A由26个小写英文字母组成A ={a,b,...z}. 该字母表产生的升序字符串指的... 现在对字母表A产生的所有长度不超过6的升序字符串按照字典序排列如下.

    实现2-6排列的字典序问题.cpp

    实现2-6排列的字典序问题.cpp

    关于字典序问题的C++算法

    在数据加密和数据压缩中常需要对特殊的字符串进行编码。...字符串按照字典序排列并编码如下。 1 2 … 26 27 28 … a b … z ab ac … 对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。

    算法设计与分析之字典序问题C++代码

    现在对字母表 A 产生的所有长度不超过 6 的升序字符串按照字典序排列并编码如下。 1 2 … 26 27 28 … a b … z ab ac … 对于任意长度不超过 6 的升序字符串,迅速计算出它在上述字典中的编码。 编程任务: 对于...

    字符串的字典序问题.txt

    字典序问题:在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由 26 个小 写英文字母组成 A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到 右出现的次序与字母在字母表中...

    字典序问题源码

    在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26个小写英文字母组成A={a, b,…, z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且...

    组合数学排列生成算法之字典序法

    排列生成算法 字典序法 C语言源代码 排列生成算法的一种,采用交换和逆序的方法生成排列

    字典序法输出排序

    本程序实现了输出字典序法的排序,可以输出一个排序也可以输出所有的排序。

    什么是字典序?字典序详解.md

    字典序 字典序,也称为词典序、字典顺序、字母序或词序,是指在排序时,按照字母顺序或数字顺序等自然顺序进行排序的方法。通常,字典序应用于字符串排序,但也适用于其他类型的数据结构。 对于字符串来说,字典序...

    字典序法生成全排列

    字典序法生成全排列,希望对学习组合数学的同学有帮助

    acm 上有关排列的字典序问题

    ACM上有关字典序问题的有关题型,在上了算法分析课后,自己做了以下程序,更简单易懂,有利于初学者C++的人学习。

    字典序算法

    用vc++实现的字典序算法的实现 很多功能正在添加完善之中

    全排列生成算法字典序vc++源码

    全排列生成算法中的字典序法的vc++源码

    华为面试-字典序字符对应的序列号

    华为的一道关于字典序面试题

    排列的字典序问题.docx

    排列的字典序问题.docx

    思维挑战15:字典序-函数strcmp().zip

    思维挑战15:字典序-函数strcmp() - 输入两个单词按字典顺序输出 ```strcmp(a, b)``` 就是比较字符串a和字 符串b在字典中的顺序。 如果字符串a和字符串b完全相同,那么返回值为0。 如果字符串a在字典中比字符...

Global site tag (gtag.js) - Google Analytics