寻找剩余最大整数:在正整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,比如当n=92081346718538,m=10时,则新的最大数是9888。
时间: 2023-04-25 12:05:10 浏览: 599
首先,我们可以将正整数 n 转换成一个由每个数字组成的数组,比如 n=92081346718538 可以表示为 [9, 2, , 8, 1, 3, 4, 6, 7, 1, 8, 5, 3, 8]。
接下来,我们需要删除 m 个数字,使得余下的数字按原次序组成的新数最大。这个问题可以通过贪心算法来解决。
具体来说,我们可以从左到右遍历数组,对于每个数字,如果它比后面的数字小,就将它删除。如果删除的数字数量已经达到了 m,就停止遍历。
最后,我们将剩余的数字按原次序组成一个新的数,就是最大的数。比如对于 n=92081346718538,m=10,我们可以按照上述方法删除数字,得到剩余的数字为 [9, 8, 8, 8],将它们按原次序组成的新数就是 9888,是最大的数。
因此,寻找剩余最大整数的问题可以通过贪心算法解决。
相关问题
给定n位正整数a,删掉其中任意k(k<n)个数字后,剩余数字按原次序排列组成一个新的正整数。c语言
### 回答1:
以下是一个简单的C语言程序,可以实现这个功能:
```c
#include <stdio.h>
#include <string.h>
int main() {
char a[1000];
int k, n, i, j;
scanf("%s %d", a, &k);
n = strlen(a);
// 从左往右删除数字,直到删除k个
for (i = 0; i < k; i++) {
// 找到第一个比右边数字大的数字,删除它
for (j = 0; j < n - 1; j++) {
if (a[j] > a[j+1]) {
// 删除a[j]
memmove(a+j, a+j+1, n-j-1);
n--;
break;
}
}
}
// 输出剩余数字
printf("%s\n", a);
return 0;
}
```
程序首先读入一个字符串a和一个整数k,然后计算字符串长度n。接下来,程序从左往右删除数字,直到删除k个为止。具体地,程序从左往右遍历字符串,找到第一个比右边数字大的数字,删除它。删除操作使用了C标准库函数`memmove`,它可以将字符串中从给定位置开始的若干个字符向左移动若干个位置,从而删除一个字符。最后,程序输出剩余数字。
### 回答2:
你可以使用C语言编程来实现这个功能。具体步骤如下:
1. 首先,创建一个函数来实现删除数字的功能。这个函数将接受两个参数:原始的正整数a和要删除的数字个数k。函数应该返回一个新的正整数作为结果。
2. 在函数内部,将正整数a转换为一个字符串。你可以使用sprintf函数来实现这一点。
3. 创建一个循环来删除k个数字。在每一次循环中,找到当前字符串中最小的数字,并将其删除。你可以使用strchr函数来找到字符串中的特定字符,并使用strcpy函数来删除它。
4. 循环结束后,将剩余的字符串转换回一个正整数。你可以使用atoi函数来实现这一点。
5. 最后,将新的正整数作为结果返回。
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int deleteDigits(int a, int k) {
char str[11];
sprintf(str, "%d", a);
int len = strlen(str);
while (k > 0) {
int min_index = 0;
for (int i = 1; i < len && i <= k; i++) {
if (str[i] < str[min_index]) {
min_index = i;
}
}
strcpy(&str[min_index], &str[min_index + 1]);
len--;
k--;
}
return atoi(str);
}
int main() {
int a, k;
printf("请输入一个整数:");
scanf("%d", &a);
printf("请输入要删除的数字个数:");
scanf("%d", &k);
int result = deleteDigits(a, k);
printf("删除数字后的结果为:%d\n", result);
return 0;
}
```
请注意,这只是一个简单的示例代码,可能存在一些边界情况没有考虑到,比如当k大于等于数字位数时的情况。你可以根据实际需求对代码进行修改和优化。
### 回答3:
问题描述:
给定一个n位的正整数a,删除其中任意k(k<n)个数字后,剩余数字按原次序组成一个新的正整数。要求使用C语言实现。
解决方案:
首先,我们可以将正整数a转化为字符串形式,以便进行操作。然后,我们可以通过比较相邻字符的大小,删除数字,直到删除k个数字为止。具体步骤如下:
1. 将正整数a转化为字符串形式,命名为str_a。
2. 创建一个新的字符串,命名为ans,用于存储最终结果。
3. 初始化一个变量count为0,用于记录已删除的数字个数。
4. 使用循环遍历str_a,判断相邻字符的大小。
5. 如果当前字符大于下一个字符,则删除当前字符,并将count加1。如果count等于k,跳出循环。
6. 如果count小于k,说明还需要继续删除数字。将剩余的字符添加到ans中。
7. 如果count等于k,说明已经删除了足够的数字。将剩余的字符添加到ans中,并结束循环。
8. 输出ans作为最终结果。
以下是C语言代码的实现:
#include<stdio.h>
#include<string.h>
void delete_digits(char* str_a, int k) {
int n = strlen(str_a);
char ans[100];
int count = 0;
int i;
for(i = 0; i < n; i++) {
while(count < k) {
if(str_a[i] > str_a[i+1]) {
count++;
break;
}
else {
ans[i-count] = str_a[i];
}
i++;
}
ans[i-count] = '\0';
}
printf("The new number after deleting %d digits is: %s\n", k, ans);
}
int main() {
char str_a[100];
int k;
printf("Enter the number: ");
scanf("%s", str_a);
printf("Enter the number of digits to be deleted: ");
scanf("%d", &k);
delete_digits(str_a, k);
return 0;
}
运行示例:
输入:
Enter the number: 123456789
Enter the number of digits to be deleted: 3
输出:
The new number after deleting 3 digits is: 1236789
python给定一个n位正整数(n<=20),根据设定的保留位数,舍去一部分数字,剩下的数字按原次序组成一个最大的新数
思路:
1.将给定的正整数转换成字符串形式。
2.按照保留位数从左到右遍历字符串,在每个位置上选择留下的数字:
如果当前位置的数字比右侧数字小,则保留右侧数字,否则保留当前数字。
3.将选择的数字按原次序组成一个新的字符串,再将其转换成整数返回。
实现代码如下:
def get_new_number(n, digits):
s = str(n)
l = len(s)
new_s = ""
for i in range(l):
keep = True
for j in range(i+1, l):
if j-i > digits:
break
if s[j] > s[i]:
keep = False
break
if keep:
new_s += s[i]
return int(new_s)
# 测试
print(get_new_number(123456789, 3)) # 789
print(get_new_number(987654321, 5)) # 9876
print(get_new_number(123456789, 7)) # 1234567
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)