1. 程式人生 > >整數m去掉n位後剩下最大(小)值

整數m去掉n位後剩下最大(小)值

sed tps sdn href stub ann blank pri 如果

題目描述

給定一個正整數(<=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 }

整數m去掉n位後剩下最大(小)值