zoukankan      html  css  js  c++  java
  • CD key 生成

    题目描述如下:

      某欧软件需要实现简易的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:

        

    num=raw_input()
    char_table="23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
    str_14=''
    str_15=''
    str_16=''
    result=''
    num2 = 0
    bin_num1 = str(bin(int(num[0]))).replace('0b','')
    bin_num2 = str(bin(int(num[2]))).replace('0b','')
    bin_num3 = str(bin(int(num[4]))).replace('0b','')
    bin_48 = bin_num1.zfill(16) + bin_num2.zfill(16) + bin_num3.zfill(16)
    for i in range(14):
        str_14=str_14+char_table[int(bin_48[-5:],base=2)]
        bin_48 = bin_48[-5:]+bin_48[:-5]
    for i in range(14):
        num2 = ord(str_14[i]) +num2
    tmp_str_2=str(bin(int(num2))).replace('0b','').zfill(32)[-10:]
    str_15=char_table[int(tmp_str_2[-5:],base=2)]
    str_16=char_table[int(tmp_str_2[:-5],base=2)]
    result_tmp=str_14+str_15+str_16
    for i in range (16):
        if i % 4 == 0 and i!=0:
            result=result+'-'+result_tmp[i]
        else :
            result = result+result_tmp[i]
    print result
  • 相关阅读:
    Ubuntu 使用OpenCV 利用Makefile运行
    YOLOV3——PyTorch训练TensorFlowLite部署模型转换
    PyTorch——学习笔记
    opencv调用摄像头分辨率问题
    Dlib与Opencv中图像格式转换(matrix-Mat)
    Windows下 VS2015 + Dlib + CUDA环境搭建
    OpenCV——银行卡识别
    QT入门
    LeetCode——最长连续回文串
    数值分析--第四章--特征值特征向量计算(乘幂法)
  • 原文地址:https://www.cnblogs.com/codeblock/p/5957061.html
Copyright © 2011-2022 走看看