列表

详情


QQ3. 编码

描述

假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.

输入描述

输入一个待编码的字符串,字符串长度小于等于100.

输出描述

输出这个编码的index

示例1

输入:

baca

输出:

16331

原站题解

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-30

#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int len=s.length();
    int index=0;
    for(int i=0;i<len;i++,index++){
        int n=s[i]-'a';
        for(int j=0;j<4-i;j++){
            index+=n*pow(25,j);
        }
    }
    cout<<index-1<<endl;
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-22

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main() {
	string s;
	while (cin >> s) {
		int cnt = 0, tmp1 = 0;
		for (int i = 0; i<4; i++) {
			if (i <= s.size() - 1) {
				tmp1 = tmp1 * 25 + (s[i] - 'a');
				if (i == s.size() - 1)
					cnt = cnt + tmp1;
				else
					cnt = cnt + tmp1+1;
			}
			else {
				tmp1 = tmp1 * 25;
				cnt = cnt + tmp1;
			}
		}
		cout << cnt << endl;
	}
}

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-19

#include <iostream>
#include <string.h>
#include <vector>
using namespace std;

char str[1010];
int base[4];

int main()
{
    while(cin>>str)
    {
        int len = strlen(str);
        base[3] = 1;
        for(int i=2;i>=0;i--)
        {
            base[i] = base[i+1]*25+1;
        }

        int _index = 0;
        for(int j=0;j<len;j++)
        {
            _index += ((str[j]-'a')*base[j]+1);
        }
        cout<<_index-1<<endl;
    }
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-17

#include <iostream>
#include <string>
using namespace std;

int num(int n)
{
    int ans = 0;
    int t = 1;
    for(int i = 0; i <= n; i++)
    {
        ans += t;
        t *= 25;
    }
    return ans;
}

int main()
{
    string s;
    cin >> s;
    int ans = 0;
    for(int i = 0; i < s.size(); i++)
    {
        ans += (s[i] - 'a')*num(3 - i);
        if(i != s.size() - 1)
            ans++;
    }
    cout << ans;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-06

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	string a;
	cin >> a;
	int len = a.size();
    int index = min(4,len);
    int cur = 0, sum = 0;
    for(int i = 0;i<index;i++)
    {
        cur += a[i]-'a';
        sum += cur;
        if(i<index-1)
            sum++;
        cur *=25;
    }
    while(index<4)
        {
        sum+=cur;
        cur *=25;
        index++;
    }
    cout<<sum;
	return 0;
}

上一题