数学课上,老师给你了一个很大的整数,最大可能达到100位,然后告诉你删除其中若干位,但要保证删除若干位后的新的数是最小的数。用python实现这个程序。 输入 一行一个n位的整数和要删除的位数个数k。n大于0小于100. 输出 删除k位后,最小的新数。 样例输入 12345678654321 1 样例输出 1234567654321
时间: 2024-03-23 18:41:09 浏览: 102
抱歉,我之前的回答好像有误,下面是更正后的Python代码实现:
```python
def delete_digits(num, k):
stack = []
for i in range(len(num)):
while stack and k > 0 and stack[-1] > num[i]:
stack.pop()
k -= 1
stack.append(num[i])
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)
```
这个程序首先定义了一个栈 `stack`,然后遍历整个输入的数字 `num`,如果当前数字比栈顶元素小,就弹出栈顶元素,直到栈顶元素比当前数字小或者已经删除了 `k` 个数字为止,然后将当前数字入栈。最后再从栈中弹出 `k` 个数字即可。需要注意的是,最后得到的新数字可能会以 0 开头,需要使用 `lstrip('0')` 函数去掉前导 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。请问你有什么想法或者需要我帮助的地方吗?
阅读全文