算法设计:对于给定的长度不超过6的升序字符串,计算它在上述字典中的编码数据输入:输入数据由文件名为input.txt提供。文件的第一行是一个正整数k,表示接下来有K行。在接下来的k行中,每行给出一个字符串结果输出:将计算结果输出到文件output.txt。文件共有k行,每行对应一个字符串编码
| 1 |2| `| 26 |28 |
| a| b ||ab```|ac |
#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
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();
}
博客内容介绍了如何设计一个算法,处理长度不超过6的升序字符串,并计算其在特定字典中的编码。输入数据从input.txt读取,包含k个字符串,输出编码结果写入output.txt。

2067

被折叠的 条评论
为什么被折叠?



