字母编码

本文主要探讨了字母编码的问题,包括题目描述、输入和输出的详细说明,旨在帮助读者理解并自行实现编码算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读懂别人的思路,然后自己写一遍

题目描述

假定一种编码的编码范围是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

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] charArr = in.nextLine().toCharArray();
        int n = charArr.length;
        //一共计算4种情况的所有和
        int[] indexSum = new int[4];
        //1)求前边一位串的个数
        indexSum[0] = (charArr[0]-'a');//首位不包含charArr[0];
        if(n > 1){//判断首位可以取到charArr[0]        	
        	indexSum[0] = indexSum[0] + 1;
        }
        //2)求前边2位串长所有情况
        indexSum[1] = (charArr[0]-'a')*25;//首位不包含charArr[0];
        //判断首位是否可以取charArr[0]
        if(n > 1){
        	indexSum[1] += 1*(charArr[1]-'a');
        }
        //判断第二位是否可以取满
        if(n >2){
        	indexSum[1] += 1;
        }
        //3)求3位串的情况
        indexSum[2] = (charArr[0]-'a')*25*25;//首位不取满,其他位任意取
        //判断首位是否能取满
        if(n > 1){
        	indexSum[2] += 1*(charArr[1]-'a')*25;//第二位不取满
        }
        //判断第二位是否能取满
        if(n > 2){
        	indexSum[2] += 1*1*(charArr[2]-'a');
        }
        //判断第三位是否能取满
        if(n >3) indexSum[2] += 1;
        //求4位串的情况
        indexSum[3] = (charArr[0]-'a')*25*25*25;//首位不取满,其他位任意取
      //判断首位是否能取满
        if(n > 1){
        	indexSum[3] += 1*(charArr[1]-'a')*25*25;//第二位不取满
        }
      //判断第二位是否能取满
        if(n > 2){
        	indexSum[3] += 1*1*(charArr[2]-'a')*25;
        }
        //判断第三位是否能取满
        if(n > 3){
        	indexSum[3] += 1*1*1*(charArr[3]-'a');
        }
        //第四位不能取满,因为最大才能是4位               
        //输出结果
        int index = 0;
        for(int i : indexSum){
        	index += i;
        }
        System.out.println(index);
        //需要注意的是:每中情况计算完的时候,需要判断串尾是否能取满,取满的要求是原串长度大于当前求的串情况的串长度
        
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值