http://acm.sgu.ru/problem.php?contest=0&problem=296
水题,贪心。每次从最高位开始按非上升顺序搜索,遇到上升的则删除或者是到达尾部删除尾部。
例如,19192,要删去2位,则先删去第一个1,然后再删除第二个1.
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main(void) {
char s[1002];
int k;
scanf ("%s%d", s, &k);
int i, j, pre;
int len = strlen(s);
for (i = 0; i < k; ++i) {
bool del = false;
j = 0;
while (s[j]<'0') {
++j;
}
pre = j++;
for (; j < len; ++j) {
if (s[j] < '0') {
continue;
}
if (s[pre] < s[j]) {
s[pre] = 1;
del = true;
break;
} else {
pre = j;
}
}
if (!del) {
s[pre] = 1;
}
}
for (i = 0; i < len; ++i) {
if (s[i] > 1) {
printf ("%c", s[i]);
}
}
printf ("\n");
return 0;
}