可以算组合吗?长度为2的字母,一共有C(26,2)个,这很难理解么?然后推一下当前要算的字母在哪个位置即可了。
#include <iostream> #include "string" using namespace std; int c[27][27]; void combinations() { for (int i = 0; i <= 26; 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]; } } } return; } int main() { combinations(); string s; while (cin>>s) { for(int i=1;i<s.length();i++) { if(s[i-1]>=s[i]) { cout<<0<<endl; return 0; } } int sum=0; for(int i=1;i<s.length();i++) sum+=c[26][i]; for(int i=0;i<s.length();i++) { char ch= (!i)?‘a‘:s[i-1]+1; while(ch<=s[i]-1) { sum+=c[‘z‘-ch][s.length()-1-i]; ch++; } } cout<<++sum<<endl; } }