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

编码方式如下:

第一种

#include <iostream>
#include <string>
using namespace std;
const int arr[] = {16276, 651, 26, 1};
int main(){string s;cin>>s;int ans = 0;for(int i = 0; i < s.length(); i++){int if_1 = 1;if(i == 0) if_1 = 0;ans += (s[i]-'a') * arr[i] + if_1;}printf("%d\n", ans);return 0;
}

第二种:

#include <stdio.h>
#include <string.h>#define N1 1
#define N2 25
#define N3 (25 * 25)
#define N4 (25 * 25 * 25)#define C1 N1
#define C2 (N1 + N2)
#define C3 (N1 + N2 + N3)
#define C4 (N1 + N2 + N3 + N4)int main()
{char code[5] = {0};scanf("%s", code);int index = 0;switch(strlen(code)){case 4: index += C1 * (code[3] - 'a') + 1;case 3: index += C2 * (code[2] - 'a') + 1;case 2: index += C3 * (code[1] - 'a') + 1;case 1: index += C4 * (code[0] - 'a');default: break;}printf("%d\n", index);return 0;
}

----------------

最开始我理解的编码方式为:a,aa,aaa,aaaa,aaab,...,ayyy,aba,abb,abc,...,ayy,ab,ac,...ay,b,ba,baa,...

即a,aa,aaa,然后为四个字母,第一个位置固定为a,剩下三个位置为排列组合(25*25*25种),然后为三个字母,第一个位置为a,剩下两个位置为排列组合(25*25种),然后为两个字母,第一个位置为a,剩下一个位置为排列组合(25种);

接着b,bb,bbb,然后为四个字母,第一个位置固定为b,剩下三个位置为排列组合(25*25*25种),然后为三个字母,第一个位置为b,剩下两个位置为排列组合(25*25种),然后为两个字母,第一个位置为b,剩下一个位置为排列组合(25种);

...

直到y,yy,yyy...

这种理解是不对的,这道编程题有两个难点,第一个就是如何对其编码,开始我理解错了;第二个就是细节问题,加1与不加1的分析。

题目来源牛客网腾讯笔试题https://www.nowcoder.com/questionTerminal/6fc8716ee33e4cc59d58d7e18712094e?f=discussion

五笔的字典序编码与解码相关推荐

  1. 【转】五笔的字典序编码与解码

    题目: 五笔的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把五笔的编码按字典序排序,形成一个数组如下:a, aa, aaa, aaaa, aaab, aaac, - -, b, ba ...

  2. ibus五笔造词、删词功能

    本文转载至:http://forum.ubuntu.org.cn/viewtopic.php?t=353240 一年前,我曾问系统自带的ibus五笔86能否自定义词组?结果280的浏览量,只有2个回复 ...

  3. 学习五笔之我见[转]

    首先说下现在的状态:原来用了多年的拼音,灌水速度最快可以达到120字/分,为了切身了解五笔和拼音的各种争议,抱着实践和求知的想法来学五笔的.经过接近三个月地用五笔,现在是打单字,看着屏幕打文章的速度是 ...

  4. 算法:五笔编码,如何根据输入的词条自动生成输入编码

    算法:五笔编码,如何根据输入的词条自动生成输入编码 一.想要实现的 最近做的一个五笔码表工具,想要实现根据用户输入的词条自动生成输入编码. 比如: 输入 我们 生成 trwu 输入 五笔基础知识 生成 ...

  5. 水鱼五笔编码练习系统

    水鱼五笔编码练习系统是我大三时的一个课程设计作品,因我小时候就学会了五笔, 再之身边会五笔的人没几个,想学五笔的人又没有简单.有效的五笔练习软件可以拿来用, 这让我萌生了写一款五笔练习软件的想法.个人 ...

  6. 【原创】生成五笔编码

    生成五笔编码 最近在修改项目中汉字生成五笔编码的问题.很多的生僻字无法生成对应的五笔编码.查找了很多资料,终于找到这个非常齐全的编码表.总共20902个汉字,包括汉字与对应的全拼.五笔.郑码.UNIC ...

  7. 五笔编码查询工具(念青字库) 新增快捷键 | #hta #五笔 #javascript

    前段时间写的五笔编码查询,最近又增加了快捷键: [list] [*]'/'键定位到输入框 [*]'Esc'键定离开推入框 [/list] 看图说话: [img]http://dl.iteye.com/ ...

  8. 计算机五笔字型编码方法,无字型五笔编码计算机中文输入法

    主权项: 1.一种计算机中文键盘输入形码编码输入法,使用计算机通用西文键盘,选取汉字\r\r\r\r\n字根,对字根分组,将字根分组定义在西文键盘的不同键位上,构成中文键盘:其字编\r\r\r\r\n ...

  9. “乙”的五笔编码为什么是nnl

    N是乙的字根,再N是折的识别码.最后其实有两个L,它是单笔字的识别码. 又如:"一"字的全码是GGLL 补充: 五笔中,有五个笔划是特殊的.那就是代表五笔的横.竖.撇.捺.折.这五 ...

最新文章

  1. C++接口的定义用一个实例说明 [转]
  2. 手把手教你安装Flutter(Flutter起步之安装)
  3. leetcode 91. Decode Ways | 91. 解码方法(动态规划)
  4. SpringBoot项目的application.properties放在Jar包外加载
  5. mysql group 条件_mysql 的group by 满足的规则要求:
  6. java实现权限_Java实现权限管理的两种方式
  7. 布比Code Review赏金计划正式启动 让区块链回归代码本身
  8. 语义分割项目:病害程度定量估算(求每类占总量比例)
  9. 苹果cmsV10教程
  10. Android音频压缩方法
  11. [Excel函数] 逻辑判断函数
  12. 困扰我两天的问题(nginx配置好ssl证书,https却不能访问)
  13. MFC隐藏任务栏图标并显示到托盘
  14. html批量修改 快捷键,html怎么设置快捷键?
  15. 经验分享:计算机专业求职面试,这 5 句自我介绍模板记好了!
  16. 01_机器人坐标系的说明
  17. 在Ubuntu中安裝Anaconda
  18. 异常 exception
  19. Windows电脑关闭触摸键盘的方法
  20. 成熟男人的处事说话技巧

热门文章

  1. linux oracle lrm00109,Oracle报ORA-01078和LRM-00109错解决方法
  2. ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file 解决过程
  3. 微信小游戏过包(马甲过审策略)
  4. Excel如何批量将工作表复制到多个工作簿内
  5. 如何删除Word页眉下横线?只需1招即可轻松帮你搞定!
  6. 前端怎么把文件加密之后传给后端
  7. 破局智能制造的 9 个场景 | 战略地图
  8. 三校生计算机应用基础模块,三校生高考《计算机应用基础》电子教案.doc
  9. Emerging memories
  10. Android Annotations 配置