给一个只含数字的字符串s,从中正好删掉m个数字,求剩下的最大的数字字符串(不含前导0)?
#include <stdio.h>
#include <string.h>
char num[100];
int main() {
int n, k; // n个数删除k个数
scanf("%d %d", &n, &k);
memset(num, 0, sizeof(num));
scanf(" %s", &num);
for (int i = 1; i < n;) {
if (num[i] > num[i-1]) {
for (int j = i; j < n; j++) num[j-1] = num[j];
n--;
k--;
if (k == 0) break;
i = 1;
} else i++;
}
// n-k是因为如果k还有剩而数字已经没法再删除了,那就要删后面的数字
for (int i = 0; i < n-k; i++) printf("%c", num[i]);
}
求删除几个数使剩下的数最小?
#include <stdio.h>
#include <string.h>
int main() {
char num[100];
int n, k;
scanf("%d %d", &n, &k);
memset(num, 0, sizeof(num));
scanf(" %s", num);
for (int i = 1; i < n;) {
if (num[i] < num[i-1]) { // 后面的比前面的小,那就删去前面的
for (int j = i; j < n; j++) num[j-1] = num[j];
k--;
n--;
if (k == 0) break;
i = 1;
} else i++;
}
int b = 0;
// 特殊情况字符串都变成了0, 去前导0
while (b < n && num[b] == '0') b++;
if (b == n) printf("0\n");
else for (int i = b; i < n-k; i++) printf("%c", num[i]);
}
/*
6 3
120080
0
*/