删除数字 题目描述: 老师在黑板上写了一个不超过 500 位的正整数 n(1≤n<10500),要求同学们删除其中任意 k 个数字, 剩余数字的顺序不变,希望得到的数最大。 例如:n = 69134,k = 2,从 69134 中删除 2 个数字,将第一位 6 和第三位 1 删除,得到的新数 934 是最大的。 输入描述: 输入两个整数 n 和 k(1≤n<10500,0≤k<n的位数),整数之间以一个空格隔开 输出描述: 输出一个整数,表示删除 k 个数字后,得到的最大数 样例输入: 69134 2 样例输出: 934

正确答案:删k位求最大数,单调栈贪心:\ns,k=input().split();k=int(k);st=[]\nfor ch in s:\n while k>0 and st and st[-1]<ch:st.pop();k-=1\n st.append(ch)\nwhile k>0:st.pop();k-=1\nprint(int(''.join(st)))
试卷来源:202312(第15届)蓝桥杯C++编程青少组(选拔赛_中高级)真题