解题思路: 贪心(每次只考虑当前的前是否大于后,而不考虑后面是否还有更大数)
注意事项: 1.只有前>后才能删 2.每次删完都需要从头遍历 3.两重循坏全部遍历完若还没有达到目标位数直接pop到目标位数 4.若某次内层循坏遍历完没有执行删除则之后的循环都是在空转浪费时间,可以通过设置标志位跳出空转(优化方法,不考虑也行,不会超时)
参考代码:
def process(list,k): m = len(list) - k # 目标位数 cnt = 0 for _ in range(k): flag = 0 for i in range(len(list)-1): if list[i] > list[i+1]: list.remove(list[i]) cnt += 1 flag = 1 break if flag == 0: break if cnt < k: for _ in range(k-cnt): list.pop() for i in list: print(i,end='') print() t = int(input()) for _ in range(t): n,k = map(int,input().split()) n = str(n) list = [int(i) for i in n] process(list,k)
0.0分
1 人评分
字符串对比 (C语言代码)浏览:1413 |
Pascal三角 (C语言代码)浏览:1189 |
printf基础练习2 (C语言代码)浏览:745 |
蛇行矩阵 (C语言代码)浏览:753 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1162 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:567 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:1434 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:328 |
字符逆序 (C语言代码)浏览:617 |
1113题解浏览:791 |