这其实算是递推数学,组合只是占了一部分,先是打表了一个杨辉三角,通过字母排列的方式及个数再加和。
代码如下
#include<stdio.h>
#include<string.h>
int c[27][27]={0};
void playtable()
{
int i,j;
for(i=0;i<=26;i++)
{
for(j=0;j<=i;j++)
{
if(!j||i==j)
c[i][j]=1;
else
c[i][j]=c[i-1][j-1]+c[i-1][j];
}
}
c[0][0]=0;
return;
}
void main()
{
int i,j,len,sum;
char str[11],ch;
playtable();
while(scanf("%s",str)!=EOF)
{
len=strlen(str);
for(i=1;i<len;i++)
{
if(str[i-1]>=str[i])
{
printf("0\n");
return 0;
}
}
sum=0;
for(i=1;i<len;i++)
sum+=c[26][i];
for(i=0;i<len;i++)
{
ch=(!i)?'a':str[i-1]+1;
while(ch<=str[i]-1)
{
sum+=c['z'-ch][len-i-1];
ch++;
}
}
printf("%d\n",sum+1);
}
}