XM26. 最大新整数
描述
有一十进制正整数,移除其中的 K 个数,使剩下的数字是所有可能中最大的。输入描述
一行由正整数组成的数字字符串,和一个正整数 K,两个数据用空格隔开,如:1432219 3。输出描述
移除 K 位后可能的最大的数字字符串。示例1
输入:
1432219 3
输出:
4329
C 解法, 执行用时: 2ms, 内存消耗: 324KB, 提交时间: 2021-10-04
#include<stdio.h> #include<string.h> int main() { char a[100000]; int i,j,len,c,f=1; scanf("%s",a); scanf("%d",&c); len = strlen(a)-1; while (1) { if(f==1) { f=0; } else break; if(c==0) break; else { for(i=0;i<len;i++) { if(a[i]<a[i+1]) { for(j=i;j<len+5;j++) { f=1; a[j]=a[j+1]; } len--; c--; break; } } } } if(c!=0) for(i=0;i<strlen(a)-c;i++) printf("%c",a[i]); else puts(a); return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 420KB, 提交时间: 2021-09-04
#include<iostream> #include<stack> using namespace std; void cout1(stack<char> &s){ if(s.empty()){ return; } char top = s.top(); s.pop(); cout1(s); cout<<top; } int main(){ string str; int k; stack<char> s; cin>>str>>k; s.push(str[0]); for(int i=1;i<str.length();i++){ while(!s.empty()&& s.top()<str[i] && k>0){ s.pop(); k--; } s.push(str[i]); } while(k!=0){ s.pop(); k--; } cout1(s); return 0; }