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); }