アルゴリズム設計:与えられた長さが6を超えない昇順文字列について、上記辞書での符号化を計算する


アルゴリズム設計:所与の長さが6を超えない昇順文字列に対して、上記辞書における符号化データの入力を計算する:入力データはファイル名input.txt提供.ファイルの最初の行は正の整数kであり、次にK行があることを示す.次のk行では、各行に文字列結果の出力が与えられる:計算結果をファイルoutput.に出力する.txt.ファイルにはk行があり、各行に1つの文字列符号化が対応している.
| 1 |2 | `| 26 |28 | | a | b | |ab```|ac |
#include
#include
#include
#include
using namespace std;
/*    :          6      ,               
 *    :         input.txt  。            k,      K 。     k  ,         
 *    :          output.txt。    k ,           */
int a[26][26]={
     0};
int b[6]={
     0};
int f(string s)
{
     
    int len=s.length(),l1=0,l2;
    int num=0;
    for(int i=0;i<len-1;i++)
        num+=b[i];
    l2=len;
    for(int j=0;j<len;j++)
    {
     
        l1=s[j]-'a';
        for(int k=0;k<l1;k++)
        {
     
            num+=a[k][l2-1];
        }
        l2--;
    }
    if(len==1)
        num++;
    return num;
}
int main()
{
     

    for(int k=0;k<26;k++)
    {
     
        for (int i = 0; i < 26; i++) {
     
            if(k==0)
            {
     
                a[i][k]=1;
            }
            else {
     
                for (int j = i + 1; j < 26; j++) {
     
                    a[i][k] += a[j][k - 1];
                }
            }
            b[k]+=a[i][k];
        }
    }
    ifstream in("/home/ying/input.txt");
    ofstream out("/home/ying/output.txt");
    int n;
    string s;
    getline(in,s);
    istringstream is(s);
    is>>n;
    cout<<"n="<<n<<endl;
    int i=0;
    while(i<n)
    {
     

        getline(in,s);
        cout<<s<<endl;
        out<<f(s)<<endl;
        i++;
    }
    in.close();
    out.close();
}