求一“字典序问题”的c语言程序
来源:百度知道 编辑:UC知道 时间:2024/06/29 22:20:46
1 2 … 26 27 28 … 对应 a b … z ab ac …
对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。
编程任务:
对于给定的长度不超过6 的升序字符串,编程计算出它在上述字典中的编码。
Input
输入数据第一行给出一个字符串。
Output
程序运行结束时,将计算结果输出字符串的编码。
Sample Input
a
Sample Output
1
哇哈哈~
感觉和POJ1850 CODE一模一样,做过。排列组合问题
对于r组合a1,a2,a3,...,ar(其中a1<a2<a3<...<ar)来说,它在S的所有r组合中的编号为
C(r, n)-C(r,n-a1)-C(r-1,n-a2)-...-C(1,n-ar)
可惜分太少了,一般百度知道上这种问题应该都悬赏50以上才有人答,碰到我算你幸运
#include <iostream>
using namespace std;
__int64 cnk(__int64 n, __int64 k)
{
int i;
if(k == 0) return 1;
if(k == 1) return n;
__int64 r = n;
for(i = 2; i <= k; i++)
r = r*(n-i+1)/i;
return r;
}
int main()
{
char s[12];
__int64 i, l, ans;
while(scanf("%s", s) != EOF)
{
ans = 0;
l = strlen(s);
bool flag = true;
if(s[0] >= 'a' && s[0] <= 'z')
{
for(i = 1; i < l; i++)
{
if(s[i-1] < s[i] && 'a'<=s[i]&&s[i]<='z')
contin