列表

详情


SH4. 保留最大的数

描述

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。

输入描述

输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。

输出描述

输出保留下来的结果。

示例1

输入:

325 
1

输出:

35

示例2

输入:

3253
1

输出:

353

示例3

输入:

3253
2

输出:

53

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2018-10-13

#include <stdio.h>
#include <string.h>
int main(){
    int num = 0, m = 0;
    char a[50000] = { 0 };
    scanf("%s%d", a, &m);
    int len = strlen(a);
    int j = 0, k = 0;
    for(j = 0; j < len; j++){
        while(k > 0 && a[k - 1] < a[j] && num < m){
            k--;
            num++;
        }
        a[k] = a[j];
        k++;
    }
    a[len - m] = '\0';
    printf("%s\n", a);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2019-01-10

#include <stdio.h>

int main()
{
    int i,j,cnt,len,n;
    char str[50001];
    
    while(scanf("%s", str) != EOF){
        scanf("%d", &cnt);
        len = strlen(str);
        n = 0;
        j = 0;
        for(i=0;i<len;i++){
            while(j > 0 && str[j-1] < str[i] && n < cnt){
                n++;
                j--;
            }
            str[j++] = str[i];
        }
        str[len - cnt] = '\0';
        printf("%s\n", str);
    }
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 340KB, 提交时间: 2018-12-04

#include <stdio.h>
#include <string.h>

int main()
{
    char str[50005];
    int n,m,count=0,j=0;
    
    scanf("%s%d",str,&n);
    m=strlen(str);
    
    for(int i=0;i<m;i++)
    {
        while(j>0&&str[j-1]<str[i]&&count<n)
        {
            count++;
            j--;
        }
        str[j]=str[i];
        j++;
    }
    str[m-n]='\0';
    
    printf("%s\n",str);
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2018-12-16

#include <stdio.h>
#include <string.h>
int main(){
    int num = 0, m = 0;
    char a[50000] = { 0 };
    scanf("%s%d", a, &m);
    int len = strlen(a);
    int j = 0, k = 0;
    for(j = 0; j < len; j++){
        while(k > 0 && a[k - 1] < a[j] && num < m){
            k--;
            num++;
        }
        a[k] = a[j];
        k++;
    }
    a[len - m] = '\0';
    printf("%s\n", a);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2018-10-03

#include<stdio.h>
#include<string.h>
int main()
{
    int m,num=0;
    char a[50005]={0};
    scanf("%s%d",a,&m);
    int len=strlen(a);
    int j,k=0;
    for(j=0;j<len;j++)
    {
        while(k>0&&a[k-1]<a[j]&&num<m)
        {
            k--;
            num++;
        }
        a[k]=a[j];
        k++;
    }
    a[len-m]='\0';
    printf("%s\n",a);
}

上一题