//**程序存储问题**
//作者:崔凯
//学号:2004010966
//联系方式:ckceo@163.com 07466528201
//参考程序:姚伟提交
#include <fstream.h>
#include <string.h>
ifstream du("encode.in");
ofstream xie("output.txt");
int f(int i,int k)//调用算法分析说明书中的f(i,k)
{
int j,s=0;
if(k==1)
return 1;
else
{
for(j=i+1;j<=26;j++)
s=s+f(j,k-1);
return s;
}
}
int g(int k)//调用算法分析说明书中的g(k)
{
int i,s=0;
for(i=1;i<=26;i++)
s=s+f(i,k);
return s;
}
void main()
{
int i,j,n,sum,k;//n为总数,sum为序号
char **p;
du>>n;
p=new char*[n+2];
for(i=0;i<n;i++)
p[i]=new char[7];
for(i=0;i<n;i++)
{
du>>p[i];//存储字串
}
int d[7];//用于统计每个字串最低位的字符在字母表中的序号
for(j=0;j<n;j++)
{
int len;//定义长度
sum=1;
len=strlen(p[j]);
d[0]=0;
//定义每个待测字串最低位字符在字母表中的序列号
for(i=1;i<=len;i++)
d[i]=p[j][i-1]-'a'+1;
//计算比需要统计的字符串字长少的所有字串个数
for(k=1;k<=len-1;k++)
sum=sum+g(k);
//下面是最后的归并算法
for(i=1;i<=len;i++)
for(int h=d[i-1]+1;h<=d[i]-1;h++)
sum=sum+f(h,len-i+1);
xie<<sum<<endl;
}
}