题目:
分析:首先明确这不是进制问题。
想进行一次打表。
打表成功,代码:
#include<bits/stdc++.h>
using namespace std;
map<string,int> m;
int ans=1;
void f(int rest,char c,string s)
{
if(rest==0) {
m[s]=ans;
ans++;
return;
}
if(c=='z'+1) return;
for(int i=0;i+c+rest-1<='z';i++)
{
string ss;
char cc=i+c;
ss=s+cc;
f(rest-1,i+c+1,ss);
}
}
int main()
{
f(1,'a',"");
f(2,'a',"");
f(3,'a',"");
f(4,'a',"");
f(5,'a',"");
f(6,'a',"");
string s;
cin>>s;
cout<<m[s];
}
非打表思路:
我擦,
对组合数的另一种理解:取出不考虑顺序,也就是取出排序后,顺序是一定的,只能排列出一种情况。
好了,然后很简单,有4位的话,先组合出1,2,3,位的情况。
bcde为例。
从高位开始考虑就ok啦!
最高位置:
a开头的都可以,就是从25个选3个了。
次高位置:
a,b靠头都可以,25选2,24选2.