1972 - 寻找最大数
时间限制 : 1 秒
内存限制 : 128 MB
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
题目输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
题目输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
输入/输出样例
输入格式
2 92081346718538 10 1008908 5
输出格式
9888 98
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; }
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; }
Java解答
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int T=sc.nextInt(); while(T-->0){ String n=sc.next(); int m=sc.nextInt(); StringBuilder s=new StringBuilder(n); p: for(int i=1;i<=m;i++){ for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("0")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("1")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("2")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("3")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("4")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("5")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("6")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("7")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("8")){ s.delete(j,j+1); continue p; } } for(int j=0;j<s.length();j++){ if(s.toString().substring(j, j+1).equals("9")){ s.delete(j,j+1); continue p; } } } System.out.println(s.toString()); } } }