当前位置: 首页 > news >正文

(牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)

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

题目解析点击进入

JAVA

import java.util.*;
public class Main {
    public static int number(String str) {
        int add = str.length()-1;//要考虑到字符串的长度
        int mul1 = 1 + 25 + 25*25 + 25*25*25;//从左往右,第一位(进位所需要乘以的数值)
        int mul2 = 1 + 25 + 25*25;//第二位
        int mul3 = 1 + 25;//第三位
        int mul4 = 1;//第四位
        int[] mul = new int[4];//把上面的四个数放到数组里,以便在下面的循环中使用
        mul[0] = mul1;
        mul[1] = mul2;
        mul[2] = mul3;
        mul[3] = mul4;
        char[] ch = str.toCharArray();
        int result = 0;
        for(int i = 0;i < ch.length;i++) {
            result += (ch[i] - 'a')*mul[i];
        }
        result += add;//最后把长度考虑进去,不然会出现错误,比如a和aa都会返回0
        return result;            
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        scanner.close();
        int result = number(str);
        System.out.println(result);
    }
}

C

/* 
 * 五笔编码 
 *  
 * 五笔的编码范围是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,以此类推。 
 * 编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index; 
 * 编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。 
 */  
void WubiIndex(const string &input)  
{  
    const int NUM = 25;  
    const char* p = input.c_str();  
    int index = 0;  
    int N = 3;  
      
    int SUM[4] = {1};  
    for(int i = 1; i < 4; ++i)  
        SUM[i] = NUM * (SUM[i-1]) + 1;  
  
    while(*p)  
    {  
        int temp = 0;  
        index += (*p -'a')*SUM[N--];  
        ++p;  
    }  
    cout<<"index is "<<index<<endl;  
}  
  
void WubiCoding(int index)  
{  
    const int NUM = 25;  
          
    int SUM[4] = {1};  
    for(int i = 1; i < 4; ++i)  
        SUM[i] = NUM * (SUM[i-1]) + 1;  
  
    char ch[5] = {'\0'};  
    int N = 3;  
    int M = 0;  
    while(index > 0)  
    {  
        ch[M++] = 'a' + (index - 1)/SUM[N];  
        index = (index - 1)%SUM[N--];  
    }     
    cout<<"string is "<<ch<<endl;  
}  

相关文章:

  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • 腾讯2017秋招笔试编程题--游戏任务标记 java 实现+ c 实现
  • 腾讯面试编程给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
  • Docker的C/S模式
  • Docker与自动化部署
  • docker守护进程和配置操作
  • docker远程访问
  • 大数据的后台分析模式
  • CentOS 7.0关闭默认防火墙启用iptables防火墙
  • URI统一资源定位服务
  • linux免密登陆
  • linux netstat命令
  • 常用linux操作指令
  • hadoop搭建和指令
  • linux WC命令解析
  • css布局,左右固定中间自适应实现
  • CSS实用技巧干货
  • CSS相对定位
  • HashMap剖析之内部结构
  • HTML中设置input等文本框为不可操作
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JAVA多线程机制解析-volatilesynchronized
  • JDK 6和JDK 7中的substring()方法
  • js中的正则表达式入门
  • leetcode讲解--894. All Possible Full Binary Trees
  • PAT A1050
  • Python利用正则抓取网页内容保存到本地
  • 笨办法学C 练习34:动态数组
  • 回顾 Swift 多平台移植进度 #2
  • 聊聊flink的TableFactory
  • 马上搞懂 GeoJSON
  • 爬虫模拟登陆 SegmentFault
  • 一个完整Java Web项目背后的密码
  • 用简单代码看卷积组块发展
  • 自定义函数
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • ${factoryList }后面有空格不影响
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2)nginx 安装、启停
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)德国人的记事本
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET学习全景图
  • :O)修改linux硬件时间
  • @EventListener注解使用说明