1972 - 寻找最大数

通过次数

0

提交次数

0

时间限制 : 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());
		}
	}
}