1972 - 寻找最大数
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
Input
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
Output
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
Examples
Input
2 92081346718538 10 1008908 5
Output
9888 98
Solution C
#include"stdio.h" #include"string.h" int bijiao(int i,char *s,int n) { int j; for(j=0;j<n;j++) if(s[i]>s[j]) break; if(j>=n) return 1; return 0; } void shanchu(int i,char *s,int n) { for(;i<n-1;i++) s[i]=s[i+1]; } int main() { int n,m; scanf("%d",&n); while(n--) { char str[101]; scanf("%s%d",str,&m); int i,k=strlen(str); int j=k-m; for(i=0;i<k;) if(bijiao(i,str,k)) { shanchu(i,str,k); m--;i=0; if(m==0) break; } else i++; for(i=0;i<j;i++) printf("%c",str[i]); printf("\n"); } return 0; }
Solution C++
#include<iostream> #include<iostream> using namespace std; int a[100]={0}; int main() { int n; cin >> n; int q=1; while(n--) { ++q; string s; cin >> s; int m; cin >> m; int t = s.size(); for(int i = 1;i <= m; ++i) { for(int j = 0;j < t-1;++j) if(s[j] < s[j+1]) { for(int k = j;k < t-1; k++) s[k] = s[k+1]; break; } t--; } for(int i = 0;i < t; ++i) { a[q]=a[q]*10+s[i]-'0'; } } for(int i=2;i<=q;++i) cout<<a[i]<<endl; return 0; }