数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。用python实现这个程序,注意边界问题。 输入 一行一个n位的整数和要删除的位数个数k。n大于0小于100. 输出 删除k位后,最小的新数。 样例输入 12345678654321 1 样例输出 1234567654321
时间: 2024-03-23 15:41:12 浏览: 5
好的,以下是Python代码实现:
```python
def delete_digits(num, k):
stack = []
for x in num:
while stack and k > 0 and stack[-1] > x:
stack.pop()
k -= 1
stack.append(x)
while k > 0:
stack.pop()
k -= 1
return ''.join(stack).lstrip('0') or '0'
num, k = input().split()
new_num = delete_digits(num, int(k))
print(new_num)
```
这个程序和之前的程序实现类似,只是对于边界情况做了更多的考虑。具体来说,需要注意以下几点:
1. 在遍历数字时,应该使用for循环遍历,而不是range,这样可以避免数字前导0的问题。
2. 在弹出栈顶元素时,需要判断栈是否为空,否则会出现IndexError。
3. 在弹出栈顶元素时,还需要判断是否已经删除了k个数字,否则会出现pop操作的越界问题。
4. 在返回结果时,需要使用lstrip()函数去掉前导0,如果最终结果为空字符串,需要返回0。
你可以尝试输入样例数据 `12345678654321 1`,程序会输出 `1234567654321`。
相关问题
数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。
这是一个经典的贪心算法问题。我们可以从高位开始遍历这个数,如果当前数字比后面的数字大,则删除当前数字即可。如果当前数字比后面的数字小,则保留当前数字,继续遍历后面的数字。如果已经删除了指定数量的数字,但是后面还有数字,则直接将后面的数字全部保留。最后得到的数字就是删除若干位后的最小数。
以下是一个简单的 Python 实现:
```python
def delete_digits(num, k):
stack = []
for digit in num:
while stack and k > 0 and stack[-1] > digit:
stack.pop()
k -= 1
stack.append(digit)
# 如果 k 还有剩余,则删除末尾的数字
while k > 0:
stack.pop()
k -= 1
# 删除前导零
while stack and stack[0] == '0':
stack.pop(0)
return ''.join(stack) or '0'
```
其中,num 是给定的整数,k 是要删除的数字的数量。这个函数会返回删除若干位后的最小数。
题目描述 数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。 输入 一行一个n位的整数和要删除的位数个数k。n大于0小于100. 输出 删除k位后,最小的新数。 样例输入 复制 12345678654321 1 样例输出 复制 1234567654321
好的,你的问题是关于一个数学问题的。题目描述如下:数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。输入一行一个n位的整数和要删除的位数个数k。n大于0小于100。输出删除k位后,最小的新数。样例输入:12345678654321 1,样例输出:1234567654321。请问你有什么想法或者需要我帮助的地方吗?