算法设计:对于给定的长度不超过6的升序字符串,计算它在上述字典中的编码

算法设计:对于给定的长度不超过6的升序字符串,计算它在上述字典中的编码数据输入:输入数据由文件名为input.txt提供。文件的第一行是一个正整数k,表示接下来有K行。在接下来的k行中,每行给出一个字符串结果输出:将计算结果输出到文件output.txt。文件共有k行,每行对应一个字符串编码

| 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();
}

你可能感兴趣的:(#第一章算法概述,算法,算法)