//字母序问题
//在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26 个小
写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右
出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz
等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字
典序排列并编码如下。
1 2 … 26 27 28 …
a b … z ab ac …
对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。
第一行是一个正整数k,表示接下来共有k行。接下来的k行中,每行给出一个字符串。
输出共有k行,每行对应于一个字符串的编码。
Sample Input
2
a
b
Sample Output
12
#include<iostream>
using namespace std;
int C(int r,int n)
{
int answer=1;
int a=1,b=1;
if(r!=0)
{
for(int i=n;i>n-r;i--)
{
a=a*i;
}
for(int j=2;j<=r;j++)
b=b*j;
answer=a/b;
}
return answer;
}
int main ()
{
int i,j;
char ch[10];
int ch1[10];
cin>>ch;
int n=strlen(ch);
int sum=1;
int start=1;
for(i=1;i<n;i++)
sum+=C(i,26);
for(i=0;i<n;i++)
ch1[i]=ch[i]-96;
for(i=n;i>=1;i--)
{
for(j=start;j<ch1[n-i];j++)
{
sum+=C(i-1,26-j);
}
start=ch1[n-i]+1;
}
cout<<sum<<endl;
system("pause");
return 0;
}
这是在百度上查的程序,但是,最主要的是看不懂
求讲解!!!
急!!! 谢谢了!!!!!!
能看成进制的转换吗 他的字母没有重复现象 就像10进制的11,有重复 但这个26进制的不能重复出现两个数
本回答被网友采纳它的主要思路是什么??
追答主要思路就是你的题干。他已经说明了密码的构成。根据构成写出算法。核心是那个int C(int r,int n) ,不过你这个程序有点不完善,例如你输入aa 和 ab 结果是一样的。而且这个程序貌似不可靠,你试一下ba bb bc三个数,结果是一样的。你可以自己写一个,思路就是分解他的构成,例如a-z是1-26 ,而ab-az是27-51,因为aa重复要去掉,三位的则有3种重复,分别是aax,axa,xaa,试着把规律找出来吧。
这样吧 你把每个语句后面标上这样写的目的 刚学,什么都还不懂 谢谢了!!
这是一个C++二级考试的题,请高手指教一下
因此,在A中,首先先执行括号里面的语句y=z=8,得到y==8,z==8,接着执行4*6,得到24,并且该表达式返回第二个表达上的值,也就是24,因此x==24。同理可得B中,z==8,x==24,y==24 C中x==8 y==8 z==8 D中可以把.x=(y=z=8)看成是表达式1,4*6看成是表达式2,因此整个语...
初学C++请高手帮我看看这段代码有什么错误!程序目的是要求运行时从键盘...
1.class Time{ void set_time (void);void show_time(void);这两个函数根本没有定义 2.int set_time(void){ cin>>t.hour;cin>>t.minute;cin>>t.sec;} int show_time(void){ cout<<t,hour<<":"<<t.minute<<":"<<t.sec<<endl;} 这两个函数怎么能去访问别人的私有成员?建议多...
请高手看一下我的这个c++程序错在哪!!
friend Comeplex operator +(Comeplex &,int &);friend Comeplex operator +(int &,Comeplex &);const int &或者直接int就可以了(还有一个不好的办法,不改前面那就只能用变量去代替main函数里面的字面值常量1和5)
请高手帮我看看,这个木材加工的C++程序
我只会用C 写。不难。include "stdio.h"void main(){ int num,*p,i,j,n,k,min;printf("\\nEnter N and K :");scanf("%d%d",&n,&k);p=(int *)malloc(n*sizeof(int));for(i=0;i<n;i++){ scanf("%d",&p[i]);if(i==0)min=p[i];else{ if(min>p[i])min=p[i...
c++11里面的bind函数是什么鬼,看不懂,请高手指教
调用这个函数对象相当于调用用绑定的参数调用fn。下面给你一个使用例子吧:\/\/ bind 用例#include <iostream>#include <functional>\/\/ 自定义的一个函数double my_divide (double x, double y) {return x\/y;}\/\/ 自定义的一个结构体struct MyPair { double a,b; double multiply() {return a...
C++问题! 请高手帮忙!
8)检索(查找)指定信息。(如按姓名检索、按年龄检索)(9)参考界面如下:1-增加一位学生(1年级 2年级)2-显示全部学生(1年级 2年级)3-计算平均成绩(1年级 2年级)4-删除一个学生(1年级 2年级)5-按性别输出学生信息 6-按姓名检索学生 7-按照至少一科成绩进行排序。8-结束程序运行 ...
这里有道程序 我看不懂 请高手指教下 每一步是什么意思? 请赐教
main函数里:struct student stu[11];定义一个结构体数组变量,11个成员变量。int i,j,temp1,temp2,temp3,temp4,temp5;定义计数器i,j和五个临时变量(这五个变量没用到)for(i=1;i<11;++i){ printf("请输入第%d位同学的学号、数学成绩、英语成绩、计算机成绩:\\n",i);scanf("%d%d%d",...
下面一个C语言高手指教下,小弟看不懂!!
第三次循环:先拿2跟2比较,符合,n=n+1,n此时为3,到第一个打印语句,打印一个3和一个“\\t”,就是打印一定宽度的空格,第四次循环:先拿3跟2比较,不符合,n=n+1,n此时为4,但是因为条件不符合,就不进入循环体,退出循环,到第二个打印语句,就打印一个4,再换行。最后结果是:1 ...
C++问题,请高手指教
(‘E’-‘A’):表示两个大写字母的ASCII码的值相减:(A的ASCII码是65,E的ASCII码是69)X*(‘E’-‘A’):表示上面减得的结果和X相乘。a*=x*(‘E’ - ‘A’):表示上面乘得到的结果和a相乘后再赋给a。
关于C++的一道编程题,请高手帮忙阿
因为没有学过文件,所以不太看得懂题,还请高手指点一下文本编辑器要求:(1)编辑文本;(2)保存、打开指定位置的文本文件;(3)具有输入输出界面。... 因为没有学过文件,所以不太看得懂题,还请高手指点一下 文本编辑器要求:(1)编辑文本;(2)保存、打开指定位置的文本文件;(3)具有输入输出界面。 展开 ...