python -- 数串

30 篇文章 0 订阅
22 篇文章 1 订阅
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : concat_max.py
# author : zoujiameng@aliyun.com.cn

#题目描述
# 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
# 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
# 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
# 采用桶: dict [0-9] 每个value都是一个list
def checkList(Nlist): # 检查list中的每一个元素是否是0-1000
    for i in Nlist:
        if int(i) <= 0 or int(i) >= 1000:
            return False
    return True

def firstbit(num):
    tmp = int(num)
    if 0 <= tmp < 10:
        return tmp
    else:
        while tmp >= 10:
            tmp = tmp//10
        return tmp

def samePrefixBig(a, b):# 比较两个不同的数a和b,不考虑开头相同的位, 返回开头值大的数, a != b
    tmpa = str(a)
    tmpb = str(b)
    res = b

    startSameBit = 0
    alen = len(tmpa)
    blen = len(tmpb)
    while alen>0 and blen>0:
        if tmpa[0] == tmpb[0]: # 去除共同的前缀
            tmpa = tmpa[1:]
            tmpb = tmpb[1:]
            alen -= 1
            blen -= 1
            startSameBit += 1   
        else:
            break
    if alen == 0 and blen != 0:# b的位数多,a的位数少, 且a为b的前缀
        while blen>0 and firstbit(a) == int(tmpb[0]):
            tmpb = tmpb[1:]
            blen -= 1
            print("A---> ")
        if firstbit(a) > int(tmpb[0]):
            res = a
        elif firstbit(a) < int(tmpb[0]):
            res = b
        print("A---> %d位数少于%d,剩余长度为(%d, %d), %d, %d" % (a, b, alen, blen, firstbit(a), int(tmpb[0])))
    elif blen == 0 and alen != 0:# a的位数多,b的位数少, 且b为a的前缀
        while alen>0 and firstbit(b) == int(tmpa[0]):
            tmpa = tmpa[1:]
            alen -= 1
            print("B---> ")
        if firstbit(b) > int(tmpa[0]):
            res = b
        elif firstbit(b) < int(tmpa[0]):
            res = a
        print("B---> %d位数多于%d,剩余长度为(%d, %d), %d, %d" % (a, b, alen, blen, firstbit(b), int(tmpa[0])))
    elif alen == 0 and blen == 0:# a,b的位数一样,且只有最后一位不同
        if int(tmpa) < int(tmpb):
            res = b
        elif int(tmpa) > int(tmpb):
            res = a
    else: # 去掉共同的前缀后,剩余的数要比较首位进行比较
        if int(tmpa[0]) < int(tmpb[0]):
            res = b
        elif int(tmpa[0]) > int(tmpb[0]):
            res = a
    #print("比较 %d 和 %d, (%s, %s)相同前缀位数为%d,规则大者为 %d" % (a, b, tmpa, tmpb, startSameBit, res))
    return res

def sortListByFirstBit(alist):
    if len(alist) >= 2:
        resList = []
        for count in range(len(alist)):
            curMax = alist[0]
            for item in alist[1:]: # 查找当前list中最大开头的值
                if curMax != item:
                    curMax = samePrefixBig(item, curMax)
            resList.append(curMax)
            alist.remove(curMax)
        #print(resList)
        return resList
    else:
        return alist    

def sortFirstBit(N, Nlist):
    tuple09 = ('0','1','2','3','4','5','6','7','8','9')
    abdict = {}
    resList = []
    if checkList(Nlist) and N == len(Nlist):
        for i in Nlist: # 构造dict
            tmp = int(i)
            index = tuple09[firstbit(tmp)]
            if index in abdict.keys(): #已经有相同的首位
                abdict[index].append(tmp)
            else: #没有相同的首位
                alist = []
                alist.append(tmp)
                abdict[index] = alist
        for key in sorted(abdict.keys(), reverse=True):
            #print(type(abdict[key]), "\t", abdict[key])
            valueList = sortListByFirstBit(abdict[key])
            # 对valueList进行排序,然后存放到结果集resList中
            resList.append(valueList)
            #print(key, valueList)
    else:
        pass
        #print("input numbers happened errors")
    return resList

if __name__ == "__main__":
    a = input()
    b = str.split(input())
    ab = sortFirstBit(int(a), list(b))
    if ab:
        res = ""
        for item in ab:
            for cur in item:
                res=res+str(cur)
        print(res)

不通过

您的代码已保存
返回非零:您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0,如果是Javascript/Python等脚本语言请确认你的代码没有语法错误
case通过率为90.00%
Traceback (most recent call last):
File “a.py3”, line 109, in
ab = sortFirstBit(int(a), list(b))
File “a.py3”, line 97, in sortFirstBit
valueList = sortListByFirstBit(abdict[key])
File “a.py3”, line 73, in sortListByFirstBit
curMax = samePrefixBig(item, curMax)
File “a.py3”, line 39, in samePrefixBig
if firstbit(a) > int(tmpb[0]):
IndexError: string index out of range

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 7-6 jmu-python-不同进制数 在计算机中,数字可以用不同的进制表示。常见的进制有二进制、八进制、十进制和十六进制。 二进制是计算机中最基本的进制,只有和1两个数字。八进制是以8为基数的进制,数字由-7组成。十进制是我们平时使用的进制,数字由-9组成。十六进制是以16为基数的进制,数字由-9和A-F组成。 在Python中,可以使用不同的前缀来表示不同的进制。二进制使用b或B前缀,八进制使用o或O前缀,十六进制使用x或X前缀。 例如,二进制数1011可以表示为b1011或B1011,八进制数23可以表示为o23或O23,十六进制数AB可以表示为xAB或XAB。 在Python中,可以使用int()函数将不同进制的字符串转换为十进制数,也可以使用bin()、oct()、hex()函数将十进制数转换为二进制、八进制、十六进制字符串。 ### 回答2: 7-6 jmu-python-不同进制数 在计算机科学中,进制是十分重要的基础概念,同时也是一个容易引起误解的容易混淆的概念。所谓进制,就是用不同的符号来表示数字的位置、权值和位值。在我们日常使用中,最常见的是十进制。而在计算机中,除了十进制之外,还可以使用二进制、八进制和十六进制等不同的进制数来表示数字。 二进制(Binary) 二进制是计算机中最基本的进制,只有0和1两个数码,这是由于计算机中采用的是模拟现象来进行信息存储和处理。因此,只需要用0和1两种状态进行表示即可。例如,8位二进制数00000000表示数字0,11111111表示数字255。 八进制(Octal) 八进制是一种使用8个数字来进行编码的进制。在计算机科学中,八进制通常被用于Unix和Linux文件系统中的文件访问权限描述。在八进制中,数字由0到7的8个数码组成。例如数字78,在八进制中写作116(因为7×8的一次方加上8的零次方等于116),这就是为什么它被称为八进制。八进制一般使用前缀0来表示。 十六进制(Hexadecimal) 十六进制是一种使用16个数字来进行编码的进制。在计算机科学中,十六进制通常被用于颜色编码和内存地址表示。在十六进制中,数字由0到9和字母A到F(或a到f)的16个数码组成。为了便于区分,通常采用前缀0x来表示十六进制。例如数字256,在十六进制中写作0x100(因为256等于16的二次方)。 综上所述,不同进制数在计算机科学中有各自的应用,同时也提供了不同的方式来表示数字。对于程序员来说,熟练掌握各种进制数的概念和转换方法具有至关重要的意义。 ### 回答3: 7-6 jmu-python-不同进制数 在计算机科学中,我们经常使用不同的进制数来表达数字和数据。在Python中,我们可以使用不同的进制数来表示整数和浮点数。本文将介绍在Python中使用的不同进制数类型和如何将它们转化成十进制数。 一、二进制数 二进制是计算机语言中的基本进制。二进制数由0和1表示,是由计算机电路中硬件元件关系(电子电路)的最小单位表示的信息。在Python中,我们可以使用前缀“0b”来表示二进制数,例如: >>> a = 0b1010 >>> print(a) 10 >> b = 0b1101 >> print(b) 13 在上面的例子中,我们使用“0b”前缀来表示二进制数,然后将其赋值给变量a和变量b。最后,我们使用print()函数输出了它们在十进制下的值。 二、八进制数 八进制数是由0~7数字组成的数字系统。在Python中,我们可以使用前缀“0o”来表示八进制数,例如: >>> a = 0o10 >>> print(a) 8 >> b = 0o17 >> print(b) 15 在上面的例子中,我们使用“0o”前缀来表示八进制数,然后将其赋值给变量a和变量b。最后,我们使用print()函数输出了它们在十进制下的值。 三、十六进制数 十六进制数是由0~9和字母A~F组成的数字系统。在Python中,我们可以使用前缀“0x”来表示十六进制数,例如: >>> a = 0x10 >>> print(a) 16 >> b = 0xAB >> print(b) 171 在上面的例子中,我们使用“0x”前缀来表示十六进制数,然后将其赋值给变量a和变量b。最后,我们使用print()函数输出了它们在十进制下的值。 四、十进制数 十进制数是我们最常使用的数字系统,由0~9数字组成。在Python中,我们可以直接使用整数或浮点数来表示十进制数,例如: >>> a = 10 >>> print(a) 10 >> b = 3.14 >> print(b) 3.14 在上面的例子中,我们直接使用整数10和浮点数3.14来表示十进制数,然后通过print()函数输出它们的值。 五、不同进制数之间的转化 如果我们想要将一个二进制、八进制、十六进制数转化成十进制数,我们可以使用int()函数将其转化成整数,例如: >>> a = 0b1010 >>> print(a) 10 >> b = 0o17 >> print(b) 15 >> c = 0xAB >> print(c) 171 >> d = int('1010', 2) >> print(d) 10 >> e = int('17', 8) >> print(e) 15 >> f = int('AB', 16) >> print(f) 171 在上面的例子中,我们使用int()函数将二进制数“0b1010”转化成十进制数10,将八进制数“0o17”转化成十进制数15,将十六进制数“0xAB”转化成十进制数171。我们也可以使用int()函数对字符串进行转化,其中第二个参数表示原来数字的进制。 综上所述,Python中的不同进制数可以用来表示整数和浮点数,它们之间可以互相转化。掌握这些知识对于学习计算机科学领域的相关课程有很大的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值