鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 383

[复制链接]
发表于 2020-4-24 01:02:18 | 显示全部楼层
本帖最后由 Python3005 于 2020-4-24 01:03 编辑
import itertools
def fun(num, k):
        if len(num) == k:
                return 0
        result = []
        for each in itertools.combinations(range(len(num)), len(num) - k):
                result.append(''.join(num[x] for x in each))
        return min(result)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 01:02:35 | 显示全部楼层
本帖最后由 旅途Z 于 2020-4-26 23:56 编辑

已修改。。
def get_max_num(num_str, k):
    if len(num_str) == k:
        return 0
    j = 0
    while j < len(num_str)-1:
        if k == 0:
            break
        if int(num_str[j]) > int(num_str[j+1]):
            num_str = num_str.replace(num_str[j], "", 1)
            if j != 0:
                j -= 1
            k -= 1
        else:
            j += 1
    else:
        for i in range(k):
            num_str = num_str.replace(num_str[-1], "", 1)
    return int(num_str)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 01:13:34 | 显示全部楼层
本帖最后由 sjtuszy 于 2020-4-24 11:57 编辑
def fun383(num, k):
    if len(num) <= k:
        return '0'
    from itertools import compress as com
    list_final, i = [0]*len(num), 0
    while i < len(num)-k:
        list_0, list_num = [], []
        for index, n in enumerate(list_final):
            if n == 0:
                list_0.append(index)
        for ii in list_0:
            list_iter = list_final[:ii] + [1] + list_final[ii+1:]
            num_iter = int(''.join(com(num, list_iter)))
            list_num.append(num_iter)
            if num_iter == min(list_num):
                list_temp = list_iter
        list_final = list_temp
        i += 1
    return str(min(list_num))

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 02:17:04 | 显示全部楼层
学到了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 09:06:40 | 显示全部楼层
为什么我怎么都不会呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 09:32:49 | 显示全部楼层

如果字符串有前导‘0’,会一直和‘0’比较,建议循环过程中先去掉前导‘0’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 10:23:08 | 显示全部楼层
我来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 11:02:53 | 显示全部楼层
kinkon 发表于 2020-4-24 09:32
如果字符串有前导‘0’,会一直和‘0’比较,建议循环过程中先去掉前导‘0’

谢谢,已改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 13:07:01 | 显示全部楼层
本帖最后由 钙硼钡锗 于 2020-4-24 13:08 编辑
def f383(n,k):
    nn=list(n)
    a=0
    while k>0 and len(nn)>1:
        if nn[a]>nn[a+1] :
            nn.pop(a)
            k-=1
        else:a+=1
        if a+2>len(nn):a=0
    print(int(''.join(nn)))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 16:34:55 | 显示全部楼层
先占楼
感觉原理很简单啊:
1.选取里边的最小值,判断那个数值后边的位数是否满足len()-k-n就可以取出来;
2.然后剔除取数的前边数值,取第二个,依次类推;
不知道思路对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 20:26:22 | 显示全部楼层
def solve(num ,k):
    nums = list(num)
    num = []
    for i in nums:
        num.append(int(i))
    if len(num) <= k:
        return 0
    for i in range(k):
        for j in range(len(num) - 1):
            if num[j] > num[j + 1]:
                num.remove(num[j])
                break
            if j == len(num) - 2:
                num.remove(max(num))
    res = ''
    for i in num:
        res += str(i)
    return str(int(res))

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 23:02:51 | 显示全部楼层
本帖最后由 小十九 于 2020-4-24 23:09 编辑

def Q383(num,k):
    if k >= len(num):
        return '0'
   
    rnum = []
    for b in range(len(num)-k):
        rnum.append("".join((num[0:b],num[b+k:])))
    minnum = int(num)
    for i in rnum:
        minnum = min(minnum,int(i))
    return str(minnum)
        
if __name__ == '__main__':
    num = input('请输入一组数字: ')
    k = int(input('请输入需要移除的位数: '))
    print(Q383(num,k))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 23:23:10 | 显示全部楼层
本帖最后由 archlzy 于 2020-4-24 23:57 编辑
def fun383(string, k):

    def _short(string,k):
        while True:
            index_0 = string.index('0')
            if index_0 > k:
                break
            k -= index_0  #new k
            string = str(int(string[index_0:]))
            if '0' not in string:
                break
            if k ==0:
                break
        return (string, k)

    def _calc(string,k):
        count = 0
        while k:
            for i in range(count, len(string)-1):
                if string[i+1] < string[i]:
                    string = string[:i] + string[i+1:]
                    count = (i-1) if i >0 else 0
                    k-=1
                    if k == 0:
                        return string
                    break
            else:
                return string[:-k]

    temp_str = string
    temp_k = k
    temp_str, temp_k= _short(temp_str,temp_k)
    if temp_k==0:
        return temp_str
    return _calc(temp_str, temp_k)
def fun383_1(string,k):
    count = 0
    while True:
        if string[0] == '0':
            string = str(int(string))
        if k ==0:
            return string
        for i in range(count, len(string)-1):
            if string[i+1] < string[i]:
                string = string[:i] + string[i+1:]
                count = (i-1) if i >0 else 0
                k-=1
                break
        else:
            return string[:-k]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 19:30:26 | 显示全部楼层
def q383(num,k):
    a=[]
    d=[]
    if len(num) <=k:
        print(0)
        return 0
    for i in num:
        a.append(int(i))
    while k > 0 :
        Min=min(a[:k+1])
        b = a.index(Min)
        del a[:b]
        d.append(a[0])
        del a[0]
        k -= b
        if k==0:
            d.extend(a)
    for i in range(len(d)):
        if i == 0:
            result = d[-1]
        else:
            result += d[-(i+1)]*(10**i)
    print(str(result))
q383("10200",1)
大佬看看啊,没见过递归的小白的屑作

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:27:02 | 显示全部楼层
kinkon 发表于 2020-4-23 18:55
原地修改字符串

转列表修改

第一种方法 249 ms,第二种方法 533 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:27:42 | 显示全部楼层

输入示例 1 中的数据结果有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:28:41 | 显示全部楼层
本帖最后由 zltzlt 于 2020-4-26 13:30 编辑


解答错误

输入:num = '112', k = 1
输出:'12'
预期结果:'11'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:29:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:30:43 | 显示全部楼层

解答错误

输入:num = '1173', k = 2
输出:'13'
预期结果:'11'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:34:50 | 显示全部楼层
March2615 发表于 2020-4-23 20:23
大家都好快,越来越多人参与了,是好事啊

最后的判断也太难了,疯狂补漏的感觉

36 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 22:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表