题目描述如下:

  某欧软件需要实现简易的CD-KEY算法,输入3个正整数,以空格隔开,根据者3个正整数生成的cd-key字符串。输出格式:xxxx-xxxx-xxxx-xxyy。

  包含16个字符,以短划线隔开,其中,cd-key的最后两位yy是用于cd-key的自校验,确保cd-key本身是合法的。

  cd-key使用的字符表:23456789ABCDEFGHJKLMNPQRSTUVWXYZ(共32个,由于1和I,0和O难以辨识,被剔除)

  实现原理如下:

    (1),输入3个32bit正整数,按顺序取每个正整数取低16bit,假设a,b,c,将abc串联在一起组成48bit的唤醒,然后从低到高,每次取5个bit,

      用其取值作为下标,从32字符表中查出对应的字符,循环输出14个字符(提示:第一个输出的字符应该是c的低5bit)。

    (2),上面输出的14个字符即cd-key的从做至右的前14个字符的ascll求和,从低到高,每5bit为下标,查表生成两个字符,作为第15,16,个cd-key

      的字符即为yy

时间限制:无

内存限制:无

输入:  输入3个正整数,以空格隔开

样例输入:1 1 1

样例输出:3224-2262-2A22-J2CR

答案

  python:

    

  1. num=raw_input()
  2. char_table="23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
  3. str_14=''
  4. str_15=''
  5. str_16=''
  6. result=''
  7. num2 = 0
  8. bin_num1 = str(bin(int(num[0]))).replace('0b','')
  9. bin_num2 = str(bin(int(num[2]))).replace('0b','')
  10. bin_num3 = str(bin(int(num[4]))).replace('0b','')
  11. bin_48 = bin_num1.zfill(16) + bin_num2.zfill(16) + bin_num3.zfill(16)
  12. for i in range(14):
  13. str_14=str_14+char_table[int(bin_48[-5:],base=2)]
  14. bin_48 = bin_48[-5:]+bin_48[:-5]
  15. for i in range(14):
  16. num2 = ord(str_14[i]) +num2
  17. tmp_str_2=str(bin(int(num2))).replace('0b','').zfill(32)[-10:]
  18. str_15=char_table[int(tmp_str_2[-5:],base=2)]
  19. str_16=char_table[int(tmp_str_2[:-5],base=2)]
  20. result_tmp=str_14+str_15+str_16
  21. for i in range (16):
  22. if i % 4 == 0 and i!=0:
  23. result=result+'-'+result_tmp[i]
  24. else :
  25. result = result+result_tmp[i]
  26. print result

CD key 生成的更多相关文章

  1. Springboot集成cache的key生成策略

    代码接上文:深度理解springboot集成redis缓存之源码解析 ## 1.使用SpEL表达式 @Cacheable(cacheNames = "emp",key = &quo ...

  2. Git SSH Key 生成步骤

    it是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置. github的ssh配置如下: 一 . 设置git的user name和email: $ git ...

  3. [转] Git SSH Key 生成步骤

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  4. Github SSH 的key 生成步骤下

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  5. Git SSH Key 生成步骤及使用

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  6. github管理的建立(SSH Key生成步骤)

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  7. Mac ssh key生成

    转载https://blog.csdn.net/wangjunling888/article/details/51115659 1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/. ...

  8. ssh key生成

    Mac电脑用终端生成SSH key 访问自己的Github 字数684 阅读427 评论4 喜欢15 前言:最近有不少刚刚使用github管理代码的开发者或者新手码农在网上 问我如何关联自己的gith ...

  9. Git 中 SSH key 生成步骤

    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSH key,在此之前,必须要生成SSH key. 第1步:创建SSH Key.在windows下 ...

随机推荐

  1. 解决Robotium测试用例crash问题

    今天遇到一个棘手的问题 用robotium框架真机测试客户端时 跑到一半会crash 搜了一堆资料终于解决了 我的程序引起crash主要原因有两个: 1.用Robotium测试框架跑多个用例(写在同一 ...

  2. 看大数据时代下的IT架构(1)业界消息队列对比

    一.MQ(Message Queue) 即 消息队列,一般用于应用系统解耦.消息异步分发,能够提高系统吞吐量.MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ.RabbitMQ. ActiveM ...

  3. C语言入门(4)——常量、变量与赋值

    对于基本数据类型量,按其取值是否可改变又分为常量和变量两种.在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量.它们可与数据类型结合起来分类. 常量 常量有字符常量(Character ...

  4. 获取第下一个兄弟元素 屏蔽浏览器的差异(nextElementsibling)

    //获取element下一个兄弟元素 function getNextElementSibling(element){ //能力检测 判断是否支持nextElementSibling if(eleme ...

  5. IIS7.5(IIS7)配置伪静态urlrewrite

    找了好久,终于找到了.已经测试通过,收藏. 转载自:http://jingyan.baidu.com/article/67508eb4ff92c69cca1ce49a.html 首先新建一个应用程序池 ...

  6. AdventureWorks2008 数据库安装

    我使用的操作系统是 win 8.1,由于对早前安装的sql server 2008的兼容性不太好,要安装对应的service pack来解决一下这个问题. 如何使用 SQL Server 在 Wind ...

  7. office2010安装出错,windows installer服务不能更新一个或多个受保护的windows文件

    转自:http://www.08lr.cn/article/1985.html office2010安装过程中出现如下图错误:windows installer 服务不能更新一个或多个受保护的wind ...

  8. qt检测网络连接状态【只能检测和路由器的连接,不能测试到外网的连接】

    #include <QCoreApplication>#include <QDebug>#include <QTextStream>#include <QDi ...

  9. Git - 常用技能

    参考: http://wuchong.me/blog/2015/03/30/git-useful-skills/

  10. SGU 310. Hippopotamus( 状压dp )

    题目大意:给N块板, 有A,B2种类型的板, 要求任意M块连续的板中至少有K块B板.1≤n≤60,1≤m≤15,0≤k≤m≤n. dp(x, s)表示第x块板, x前M块板的状态为s, 然后合法状态转 ...