鱼C论坛

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

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

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

已修改。。
  1. def get_max_num(num_str, k):
  2.     if len(num_str) == k:
  3.         return 0
  4.     j = 0
  5.     while j < len(num_str)-1:
  6.         if k == 0:
  7.             break
  8.         if int(num_str[j]) > int(num_str[j+1]):
  9.             num_str = num_str.replace(num_str[j], "", 1)
  10.             if j != 0:
  11.                 j -= 1
  12.             k -= 1
  13.         else:
  14.             j += 1
  15.     else:
  16.         for i in range(k):
  17.             num_str = num_str.replace(num_str[-1], "", 1)
  18.     return int(num_str)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 01:13:34 | 显示全部楼层
本帖最后由 sjtuszy 于 2020-4-24 11:57 编辑
  1. def fun383(num, k):
  2.     if len(num) <= k:
  3.         return '0'
  4.     from itertools import compress as com
  5.     list_final, i = [0]*len(num), 0
  6.     while i < len(num)-k:
  7.         list_0, list_num = [], []
  8.         for index, n in enumerate(list_final):
  9.             if n == 0:
  10.                 list_0.append(index)
  11.         for ii in list_0:
  12.             list_iter = list_final[:ii] + [1] + list_final[ii+1:]
  13.             num_iter = int(''.join(com(num, list_iter)))
  14.             list_num.append(num_iter)
  15.             if num_iter == min(list_num):
  16.                 list_temp = list_iter
  17.         list_final = list_temp
  18.         i += 1
  19.     return str(min(list_num))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 02:17:04 | 显示全部楼层
学到了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 09:06:40 | 显示全部楼层
为什么我怎么都不会呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果字符串有前导‘0’,会一直和‘0’比较,建议循环过程中先去掉前导‘0’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 10:23:08 | 显示全部楼层
我来了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,已改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-4-24 20:26:22 | 显示全部楼层
  1. def solve(num ,k):
  2.     nums = list(num)
  3.     num = []
  4.     for i in nums:
  5.         num.append(int(i))
  6.     if len(num) <= k:
  7.         return 0
  8.     for i in range(k):
  9.         for j in range(len(num) - 1):
  10.             if num[j] > num[j + 1]:
  11.                 num.remove(num[j])
  12.                 break
  13.             if j == len(num) - 2:
  14.                 num.remove(max(num))
  15.     res = ''
  16.     for i in num:
  17.         res += str(i)
  18.     return str(int(res))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2.     def _short(string,k):
  3.         while True:
  4.             index_0 = string.index('0')
  5.             if index_0 > k:
  6.                 break
  7.             k -= index_0  #new k
  8.             string = str(int(string[index_0:]))
  9.             if '0' not in string:
  10.                 break
  11.             if k ==0:
  12.                 break
  13.         return (string, k)

  14.     def _calc(string,k):
  15.         count = 0
  16.         while k:
  17.             for i in range(count, len(string)-1):
  18.                 if string[i+1] < string[i]:
  19.                     string = string[:i] + string[i+1:]
  20.                     count = (i-1) if i >0 else 0
  21.                     k-=1
  22.                     if k == 0:
  23.                         return string
  24.                     break
  25.             else:
  26.                 return string[:-k]

  27.     temp_str = string
  28.     temp_k = k
  29.     temp_str, temp_k= _short(temp_str,temp_k)
  30.     if temp_k==0:
  31.         return temp_str
  32.     return _calc(temp_str, temp_k)
复制代码

  1. def fun383_1(string,k):
  2.     count = 0
  3.     while True:
  4.         if string[0] == '0':
  5.             string = str(int(string))
  6.         if k ==0:
  7.             return string
  8.         for i in range(count, len(string)-1):
  9.             if string[i+1] < string[i]:
  10.                 string = string[:i] + string[i+1:]
  11.                 count = (i-1) if i >0 else 0
  12.                 k-=1
  13.                 break
  14.         else:
  15.             return string[:-k]
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 19:30:26 | 显示全部楼层
  1. def q383(num,k):
  2.     a=[]
  3.     d=[]
  4.     if len(num) <=k:
  5.         print(0)
  6.         return 0
  7.     for i in num:
  8.         a.append(int(i))
  9.     while k > 0 :
  10.         Min=min(a[:k+1])
  11.         b = a.index(Min)
  12.         del a[:b]
  13.         d.append(a[0])
  14.         del a[0]
  15.         k -= b
  16.         if k==0:
  17.             d.extend(a)
  18.     for i in range(len(d)):
  19.         if i == 0:
  20.             result = d[-1]
  21.         else:
  22.             result += d[-(i+1)]*(10**i)
  23.     print(str(result))
  24. q383("10200",1)
复制代码

大佬看看啊,没见过递归的小白的屑作

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

转列表修改

第一种方法 249 ms,第二种方法 533 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入示例 1 中的数据结果有误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


解答错误

输入:num = '112', k = 1
输出:'12'
预期结果:'11'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 13:29:36 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

解答错误

输入:num = '1173', k = 2
输出:'13'
预期结果:'11'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

36 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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