本来只是求点黑马币,结果被第四题虐了,,整了快一晚上。。。
- package test;
- import java.math.BigInteger;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.TreeSet;
- class Test2 {
- /*
- * 1.遍历出斐波那契数列前100个数 2.任意定义一个数组,用for,while和递归三种方式求和
- * 3.对于任意一个给定数组比如【1,23,56,7】,给出用数组元素能够拼出的最大整数,这里的结果为756231
- * 4.1,2,3,4,5,6,7,8,9这9个数的排列顺序不能动,元素之间可以添加加号或者减号或者什么都不加,
- * 但要保证最终的结果为100;遍历出所有的可能性。
- * 5.编写一个交错排列元素的函数,比如["2","5","7"]和["a","c","e"]得到结果[2,a,5,c,7,e],bingo~
- */
- public static void main(String[] args) {
- test1();
- test2();
- test3();
- test4();
- test5();
- }
- public static void test5() {
- String[] arr1={"2","5","7"};
- String[] arr2={"a","c","e"};
- String[] result=staggeringArray(arr1,arr2);
- System.out.println(Arrays.toString(result));
- }
- public static String[] staggeringArray(String[] arr1, String[] arr2) {
- String[] result=new String[arr1.length+arr2.length];
- int min=0;
- String[] maxArr=null;
- if(arr1.length>arr2.length){
- min=arr2.length;
- maxArr=arr1;
- }else{
- min=arr1.length;
- maxArr=arr2;
- }
- for(int i=0;i<min;i++){
- result[2*i]=arr1[i];
- result[2*i+1]=arr2[i];
- }
- int index=2*min;
- for(int i=min;i<maxArr.length;i++)
- result[index++]=maxArr[i];
- return result;
- }
- //4 1,2,3,4,5,6,7,8,9这9个数的排列顺序不能动,
- //元素之间可以添加加号或者减号或者什么都不加但要保证最终的结果为100;遍历出所有的可能性。
- public static void test4() {
- combine(new StringBuilder("1"),1);
- }
- public static void combine(StringBuilder result,int index)
- {
- if(index == 9) {
- cal(result.toString());
- return;
- }
- //分三种情况,分别为插入“+”,“-”和不插入任何符号
- for(int i = 0;i < 3;i++) {
- switch(i){
- //假设i=0时插入“+”
- case 0:
- result.append("+");
- result.append(index + 1);
- combine(result,index + 1);
- result.delete(result.length() - 2,result.length());
- break;
- //假设i=1时插入“-”
- case 1:
- result.append("-");
- result.append(index + 1);
- combine(result,index + 1);
- result.delete(result.length() - 2,result.length());
- break;
- //假设i=2时什么都不插入
- case 2:
- result.append(index + 1);
- combine(result,index + 1);
- result.deleteCharAt(result.length() - 1);
- break;
- }
- }
-
- }
- public static void cal(String str) {
- int sum = 0;
- String[] num = str.split("[+|-]"); //将串中的各个数抽取出来
- String[] code = str.split("\\d"); //得到各个运算符
- sum += Integer.valueOf(num[0]); //先将第一个数加上
- int n = 0;
- for(int i = 0;i < code.length;i++) {
- if(code[i].equals("+"))
- sum += Integer.valueOf(num[++n]);
- if(code[i].equals("-"))
- sum -= Integer.valueOf(num[++n]);
- }
- if(sum == 100)
- System.out.println(str);
- }
- // 3.对于任意一个给定数组比如【1,23,56,7】,给出用数组元素能够拼出的最大整数,这里的结果为756231
- public static void test3() {
- int[] arr = { 1, 23, 56, 7 };
- String result = getMaxNumString(arr);
- System.out.println(result);
- }
- public static String getMaxNumString(int[] arr) {
- TreeSet<String> set=new TreeSet<String>(Collections.reverseOrder());
- String result="";
- for(int i:arr){
- set.add(String.valueOf(i));
- }
- for(String str:set){
- result+=str;
- }
- return result;
- }
- public static void test2() {
- int[] arr = { 1, 2, 3, 4 };
- int result1 = forAdd(arr);
- int result2 = whileAdd(arr);
- int result3 = diguiAdd(arr);
- System.out.println(result1 + ":" + result2 + ":" + result3);
- }
- private static int diguiAdd(int[] arr) {
- return diguiAdd(arr, arr.length-1);
- }
- private static int diguiAdd(int[] arr, int index) {
- if (index == 0)
- return arr[0];
- return arr[index] + diguiAdd(arr, index - 1);
- }
- private static int whileAdd(int[] arr) {
- int sum = 0;
- int index = 0;
- while (index != arr.length) {
- sum += arr[index];
- index++;
- }
- return sum;
- }
- private static int forAdd(int[] arr) {
- int sum = 0;
- for (int i = 0; i < arr.length; i++)
- sum += arr[i];
- return sum;
- }
- public static void test1() {
- BigInteger[] arr = new BigInteger[100];
- arr[0] = new BigInteger("0");
- arr[1] = new BigInteger("1");
- for (int i = 2; i < arr.length; i++) {
- arr[i] = arr[i - 1].add(arr[i - 2]);
- }
- System.out.println(Arrays.toString(arr));
- }
- }
复制代码 |