目录
前言:以下代码仅供参考,若有错误欢迎指正哦~
1 数字拆分
正整数可以表示为若干正整数的累加和。 如,对于正整数n=6,可以分划为: 6 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1+1 2+2+2 2+2+1+1 2+1+1+1+1 1+1+1+1+1+1 现在的问题是,对于给定的正整数n,计算出所有划分情况。 下面的代码实现了这个功能。仔细分析,填写划线部分缺失的代码。 public class MyTest { public static List fen(int n, int limit) { Vector v = new Vector(); if(n<=limit) v.add(n); for(int i=1; i<n; i++) { if(n-i > limit) continue; List t = fen(i,n-i); for(int k=0; k<t.size(); k++) __________________________; //填空位置 } return v; } public static void main(String[] args) { List v = fen(6,6); for(int i=0; i<v.size(); i++) System.out.println(v.get(i)); } } 注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。
答案: v.add((n-i)+"+"+t.get(k))
2 稍大的串
串可以按照字典序进行比较。例如: abcd 小于 abdc 如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些。科学地说:它是大于已知串的所有串中最小的串。你的任务就是求出这个“稍大的串”。 例如: 输入串: abfxy 程序应该输出: abfyx 再例如: 输入串: ayyyxxff 程序应该输出: fafxxyyy fyyyxxaa 数据规模约定: 输入的串不超过1000个字符。 特例: 如果已知的串已经是所有重组串中最大的,则原样输出读入的那个串。 资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。 注意:主类的名字必须是:Main,否则按无效代码处理。
1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main { 5 6 public void getResult(String A) { 7 int len = A.length(); 8 int i = len - 1; 9 for(;i >= 1;i--) 10 if(A.charAt(i - 1) < A.charAt(i)) 11 break; 12 if(i == 0) { 13 System.out.println(A); 14 return; 15 } 16 char temp = A.charAt(i - 1); 17 char[] arrayB = A.substring(i).toCharArray(); 18 Arrays.sort(arrayB); 19 for(int j = 0;j < arrayB.length;j++) 20 if(arrayB[j] > temp) { 21 char a = arrayB[j]; 22 arrayB[j] = temp; 23 temp = a; 24 break; 25 } 26 StringBuilder result = new StringBuilder(A.subSequence(0, i - 1)); 27 result.append(temp); 28 for(int j = 0;j < arrayB.length;j++) 29 result.append(arrayB[j]); 30 System.out.println(result); 31 } 32 33 public static void main(String[] args) { 34 Main test = new Main(); 35 Scanner in = new Scanner(System.in); 36 String A = in.next(); 37 test.getResult(A); 38 } 39 }