整数m去掉n位后剩下最大(小)值

题目描述

给定一个正整数(<=255位),从中删去n位后,使得剩下的数字组成的新数最小(大);

思路:从左到右开始扫描,两两比较,如果是前一位比后一位大,则删去前大的一位,直到删完所有的n位;

【从论坛看到的一个题目,觉得挺好的,代码是论坛的大佬写的,不过好像没处理好以0开头的问题。】

再贴一个c写的吧,这也写得挺好的:https://blog.csdn.net/liveas/article/details/5732759

 1 public static void main(String[] args) {
 2         // TODO Auto-generated method stub
 3         int i,j,k,length,n,m;
 4         Scanner sc=new Scanner(System.in);    //warning :leak: ‘sc‘ is never closed
 5         String s=sc.nextLine();   //输入的整型数;
 6         char c;
 7         n=sc.nextInt();
 8         int index;
 9         sc.close();
10         if(n>s.length())     //如果删除的长度比输入的整数本身还要大就报错;
11         {
12             System.out.println("Error!");
13             return;
14         }for(i=0;i<n;i++)
15         {
16             j=0;        //j重新从0下标开始;
17             while(j<s.length())
18             {
19                 if(j==s.length()-1)
20                 {
21                     s=s.substring(0, j);
22                     break;
23                 }
24                 index=j+1;
25                 c=s.charAt(index);
26                 if(s.charAt(j)-‘0‘<=(c-‘0‘))
27                 {
28                     j++;
29                     continue;
30                 }
31                 else
32                 {
33                   s=s.substring(0,j)+s.substring(index,s.length());      //把j位的字符截去;
34                   break;
35                 }
38             }
39         }
40         System.out.println(s);
41     }

原文地址:https://www.cnblogs.com/Guhongying/p/9079278.html

时间: 2024-07-30 10:16:01

整数m去掉n位后剩下最大(小)值的相关文章

Algorithm --&gt; n位数去掉k位后找最小数

去掉K位求取最小数 一个n位的数,去掉其中的k位,怎样使留下来的(n-k)位数按原来的前后顺序组成的数最小 例如 8314925去掉4个数,留下125最小,注意有前后顺序要求,要是没有顺序当然是123. 解决方案 贪心算法,在每次被访问的位置保证有最优解. 思路一 分析:求一共n位,求其中的m位组成的数最小.那么这个m位的数,最高位应该在原数的最高位到第m位区间找,要不然就不能当第m位了,如下图(得到3位数最小,要是百位数在25中找,就当不了百位数了): 同样找十位数时只能在百味数到目前位置中间

[LeetCode] Remove K Digits 去掉K位数字

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible. Note: The length of num is less than 10002 and will be ≥ k. The given num does not contain any leading zero. Ex

shell 通过shift获得某位后的入参

有时shell的入参个数不定,想要获得第2位后的参数,作为新的入参调用其他脚本 通常这时候想到的方法是用遍历,例如下面的方法: for (( i=2;i<=$#;i++)) do echo $i done 更简便的方法:使用shift去移动参数,shift (n),默认n为1,移动的位数 shift会将n位前的入参舍弃掉,只会保留n+1以及他后面的入参 例如:shift 2,会舍弃第一位第二位入参,只保留第3位及以后的入参 执行 test.sh 1 2 3 4 5 6 7 8 9,test.sh

如何去掉添加链接后图片的边框

如何去掉添加链接后图片的边框: IE浏览器中,默认状态下,如果给图片添加链接图片会产生边框.只要为图片的CSS代码添加border:0px即可. 代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <ti

数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A

废话不多说  源代码中有注释 /* File : ABN.c Date : 2015/4/4 version : 1.0 platform : windows 7 x86_64 Function : A + B = N 1 <= N <= 10^9 B 是A去掉一个数字后得到 例如 A + B = 34 A可以是27或31 特例: 12 = 11 + 1 会执行两次 11 十位个位一样,去掉十位和个位一样. 故可以用一个数组保存结果最后输出. */ #include <stdio.h&g

SQL去掉小数点有效数字后的所有0

原文:SQL去掉小数点有效数字后的所有0 第一种方法 select cast(2.5000000000000   as  real) select cast(2   as  real) select cast(2.00000   as  real) 第二种方法 CREATE function [dbo].[ClearZero](@inValue varchar(50)) returns varchar(50) as begin declare @returnValue varchar(20) i

iOS 身份证最后一位是X,输入17位后自动补全X(转)

非原创,转载自http://blog.csdn.net/l2i2j2/article/details/51542028如果身份证最后一位是X,输入17位后自动补全X// textField代理方法 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // string.length为0,表明没有输

升级Ubuntu 到14.04 64位 后eclipse出现闪退现象

升级Ubuntu 到14.04 64位 后eclipse出现闪退现象,搜了各种方法,最后解决问题 解决方法: 在所装的eclipse的目录下有个configuration/config.ini 文件 最后一行添加:org.eclipse.swt.browser.DefaultType=mozilla

38.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

//从这个小题可以学习到完全平方数的判断 //1.先判断出题目需要一个循环来尝试不同的数,for循环较为适合 //2.题目的关键是如何表示完全平方数,运用到sqrt()函数,通过sqrt*sqrt间接的达到完全平方的要求 ?#include<iostream> #include<cmath> using namespace std; int main() { int temp1,temp2; for(int i=1;i<=10000;i++) { temp1=sqrt(i+1