题目描述:
给定一正整数n(n的位数小于240),现要删除数n中的s个数码,使其得到的新数最小,求这个最小数。
输入
输入有两行,第一行为整数n,第二行即为s
输出
输出一行,即最小的那个数
测试样例1
输入
123456
1
输出
12345
测试样例2
输入
234516
3
输出
216
解题思路
首先考虑s=1时的情况,很容易知道如果只删一个数,那么若各位数字递增则删除最后一个数,否则删除第一个递减区间的首字符,这样删除便可以得到最小的数。而对于s>1时,我们只需要重复这种操作s次,得到的操作就是所求的最小数。
程序代码
using System; using System.Text; namespace tanxin{ class delnum { static void Main( string [] args) { string n; int s; n = Console.ReadLine(); s = int .Parse(Console.ReadLine()); Console.WriteLine(GetMinNum(n, s).ToString()); } public static StringBuilder GetMinNum( string n, int s) { bool flag; StringBuilder str = new StringBuilder(n); for ( int i = s; i > 0 ; i -- ) { flag = false ; for ( int j = 0 ; j < str.Length - 1 ; j ++ ) { if (str[j] > str[j + 1 ]) { str.Remove(j, 1 ); flag = true ; break ; } } if ( ! flag) { str.Remove(str.Length - i,i); break ; } } return str; } }}