题目说是一个非递减的字符串,求这个字符串表示的数字,要是这个不是升序的就是一个非法的输入,直接输出0程序结束
思路:组合数学。。
说一下长度相等的时候的想法。。就类似于五个人抢三个座位有几个坐位的那种思路。`
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int c[27][27];
char s[11];
int length;
void table()//进行打表
{
for(int i=0;i<27;++i)
for(int 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];//利用组合数公式进行递推
}
bool judge()
{
for(int i=0;i<length-1;++i)
if(s[i]>=s[i+1])
return 0;
return 1;
}
int main()
{
int sum;
table();
while(cin>>s)
{
sum=0;
length=strlen(s);
if(!judge())
{
cout<<0<<endl;
return 0;
}
for(int i=1;i<length;i++)
sum+=c[26][i];
for(int i=0;i<length;++i)
{
char temp=(!i)?'a':s[i-1]+1;
while(temp<s[i])
{
sum+=c['z'-temp][length-i-1];
temp++;
}
}
cout<<++sum<<endl;
}
return 0;
}