A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jaybor   /  2015-5-21 20:29  /  11892 人查看  /  239 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

看看大神
回复 使用道具 举报
膜拜大声!求黑马币!
回复 使用道具 举报
本来只是求点黑马币,结果被第四题虐了,,整了快一晚上。。。


  1. package test;

  2. import java.math.BigInteger;
  3. import java.util.Arrays;
  4. import java.util.Collections;
  5. import java.util.TreeSet;

  6. class Test2 {

  7.         /*
  8.          * 1.遍历出斐波那契数列前100个数 2.任意定义一个数组,用for,while和递归三种方式求和
  9.          * 3.对于任意一个给定数组比如【1,23,56,7】,给出用数组元素能够拼出的最大整数,这里的结果为756231
  10.          * 4.1,2,3,4,5,6,7,8,9这9个数的排列顺序不能动,元素之间可以添加加号或者减号或者什么都不加,
  11.          * 但要保证最终的结果为100;遍历出所有的可能性。
  12.          * 5.编写一个交错排列元素的函数,比如["2","5","7"]和["a","c","e"]得到结果[2,a,5,c,7,e],bingo~
  13.          */
  14.         public static void main(String[] args) {
  15.                 test1();
  16.                 test2();
  17.                 test3();
  18.                 test4();
  19.                 test5();
  20.         }

  21.         public static void test5() {
  22.                 String[] arr1={"2","5","7"};
  23.                 String[] arr2={"a","c","e"};
  24.                 String[] result=staggeringArray(arr1,arr2);
  25.                 System.out.println(Arrays.toString(result));
  26.         }

  27.         public static String[] staggeringArray(String[] arr1, String[] arr2) {
  28.                 String[] result=new String[arr1.length+arr2.length];
  29.                 int min=0;
  30.                 String[] maxArr=null;
  31.                 if(arr1.length>arr2.length){
  32.                         min=arr2.length;
  33.                         maxArr=arr1;
  34.                 }else{
  35.                         min=arr1.length;
  36.                         maxArr=arr2;
  37.                 }
  38.                 for(int i=0;i<min;i++){
  39.                         result[2*i]=arr1[i];
  40.                         result[2*i+1]=arr2[i];
  41.                 }
  42.                 int index=2*min;
  43.                 for(int i=min;i<maxArr.length;i++)
  44.                         result[index++]=maxArr[i];
  45.                 return result;
  46.         }
  47.         //4 1,2,3,4,5,6,7,8,9这9个数的排列顺序不能动,
  48.         //元素之间可以添加加号或者减号或者什么都不加但要保证最终的结果为100;遍历出所有的可能性。
  49.         public static void test4() {
  50.                 combine(new StringBuilder("1"),1);
  51.         }
  52.           public static void combine(StringBuilder result,int index)
  53.             {
  54.                 if(index == 9) {
  55.                     cal(result.toString());
  56.                     return;
  57.                 }
  58.                 //分三种情况,分别为插入“+”,“-”和不插入任何符号  
  59.                 for(int i = 0;i < 3;i++) {
  60.                         switch(i){
  61.                         //假设i=0时插入“+”
  62.                         case 0:
  63.                                 result.append("+");
  64.                                 result.append(index + 1);
  65.                                 combine(result,index + 1);
  66.                                 result.delete(result.length() - 2,result.length());
  67.                                 break;
  68.                                 //假设i=1时插入“-”
  69.                         case 1:
  70.                                 result.append("-");
  71.                                 result.append(index + 1);
  72.                                 combine(result,index + 1);
  73.                                 result.delete(result.length() - 2,result.length());
  74.                                 break;
  75.                                 //假设i=2时什么都不插入
  76.                         case 2:
  77.                                 result.append(index + 1);
  78.                                 combine(result,index + 1);
  79.                                 result.deleteCharAt(result.length() - 1);  
  80.                                 break;
  81.                         }
  82.                 }
  83.                 
  84.             }

  85.           public static void cal(String str) {
  86.                   int sum = 0;
  87.                   String[] num = str.split("[+|-]");  //将串中的各个数抽取出来  
  88.                   String[] code = str.split("\\d"); //得到各个运算符  
  89.                   sum += Integer.valueOf(num[0]);  //先将第一个数加上  
  90.                   int n = 0;
  91.                   for(int i = 0;i < code.length;i++) {
  92.                           if(code[i].equals("+"))
  93.                                   sum += Integer.valueOf(num[++n]);
  94.                           if(code[i].equals("-"))
  95.                                   sum -= Integer.valueOf(num[++n]);
  96.                   }
  97.                   if(sum == 100)
  98.                           System.out.println(str);
  99.           }

  100.         // 3.对于任意一个给定数组比如【1,23,56,7】,给出用数组元素能够拼出的最大整数,这里的结果为756231
  101.         public static void test3() {
  102.                 int[] arr = { 1, 23, 56, 7 };
  103.                 String result = getMaxNumString(arr);
  104.                 System.out.println(result);
  105.         }

  106.         public static String getMaxNumString(int[] arr) {
  107.                 TreeSet<String> set=new TreeSet<String>(Collections.reverseOrder());
  108.                 String result="";
  109.                 for(int i:arr){
  110.                         set.add(String.valueOf(i));
  111.                 }
  112.                 for(String str:set){
  113.                         result+=str;
  114.                 }
  115.                 return result;
  116.         }

  117.         public static void test2() {
  118.                 int[] arr = { 1, 2, 3, 4 };
  119.                 int result1 = forAdd(arr);
  120.                 int result2 = whileAdd(arr);
  121.                 int result3 = diguiAdd(arr);
  122.                 System.out.println(result1 + ":" + result2 + ":" + result3);
  123.         }

  124.         private static int diguiAdd(int[] arr) {
  125.                 return diguiAdd(arr, arr.length-1);
  126.         }
  127.         private static int diguiAdd(int[] arr, int index) {
  128.                 if (index == 0)
  129.                         return arr[0];
  130.                 return arr[index] + diguiAdd(arr, index - 1);
  131.         }

  132.         private static int whileAdd(int[] arr) {
  133.                 int sum = 0;
  134.                 int index = 0;
  135.                 while (index != arr.length) {
  136.                         sum += arr[index];
  137.                         index++;
  138.                 }
  139.                 return sum;
  140.         }

  141.         private static int forAdd(int[] arr) {
  142.                 int sum = 0;
  143.                 for (int i = 0; i < arr.length; i++)
  144.                         sum += arr[i];
  145.                 return sum;
  146.         }

  147.         public static void test1() {
  148.                 BigInteger[] arr = new BigInteger[100];
  149.                 arr[0] = new BigInteger("0");
  150.                 arr[1] = new BigInteger("1");
  151.                 for (int i = 2; i < arr.length; i++) {
  152.                         arr[i] = arr[i - 1].add(arr[i - 2]);
  153.                 }
  154.                 System.out.println(Arrays.toString(arr));
  155.         }
  156. }

复制代码

评分

参与人数 1黑马币 +5 收起 理由
Jaybor + 5 很给力!

查看全部评分

回复 使用道具 举报
必须支持!!!
回复 使用道具 举报
发第四题代码:

  1. package test;
  2. public class C3 {   
  3.     // 遍历所有情况   
  4.     public static void fun(String v, int n) {   
  5.         if(n==9){   // 修改完最后一位符号时输出   
  6.             check(v);
  7.             return;
  8.         }
  9.         // 递归向后修改,数字 变为 数字加符号   
  10.         fun(v.replace(String.valueOf(n), n+"+"),n+1);
  11.         fun(v.replace(String.valueOf(n), n+"-"),n+1);
  12.         fun(v,n+1);
  13.          
  14.     }   
  15.     public static void check(String str){   
  16.         String[] s = str.split("[+|-]");    // 得到全部数字   
  17.         String sign = str.replaceAll("\\d*","");   // 得到全部符号(+-)   
  18.         int sum = Integer.parseInt(s[0]);   // 把第一个数字给sum   
  19.         for(int i=0;i<s.length-1;i++){   
  20.             switch(sign.charAt(i)){
  21.                 case '+':   
  22.                     sum += Integer.parseInt(s[i+1]);   
  23.                     break;   
  24.                 case '-':   
  25.                     sum -= Integer.parseInt(s[i+1]);   
  26.                     break;   
  27.             }   
  28.         }   
  29.         if(sum==100){   // 符合条件输出   
  30.             System.out.println(str);   
  31.         }   
  32.     }   
  33.    
  34.     public static void main(String[] args){   
  35.         String str = "123456789";   
  36.         fun(str,1);     // 调用函数,从1开始修改   
  37.     }   
  38. }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
Jaybor + 2 很给力!

查看全部评分

回复 使用道具 举报
顶一下能领吗?我的黑马怎么还减少了4个。
回复 使用道具 举报
gainn 中级黑马 2015-5-22 23:19:16
87#
先领题,周日做出来贴上
回复 使用道具 举报
第四题有点难度
回复 使用道具 举报
没有回答的吗?  有空做做,

现在没时间啊,天天敲代码都敲不过来..
回复 使用道具 举报
顶一下  坐等大神回复
回复 使用道具 举报

/*
* 4:求斐波那契数列第n项,n<30,斐波那契数列前10项为
*  1,1,2,3,5,8,13,21,34,55
*
*/
import java.util.*;
public class Test4 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //提示用户输入数字
                System.out.println("请输入斐波那契数列第n项,n<30:");
                //接收键盘录入的整数,
                Scanner sc = new Scanner(System.in);
         int i = sc.nextInt();
         //调用方法,返回斐波那契数
                 int s=feiShu(i);
                  System.out.println(s);
        }
        //定义方法,求斐波那契数
          static int feiShu(int i){
       
                if(i==1||i==2)
                        return 1;
                return feiShu(i-1)+feiShu(i-2);
        }

}

评分

参与人数 1黑马币 +2 收起 理由
Jaybor + 2 很给力!

查看全部评分

回复 使用道具 举报
不错的帖子
回复 使用道具 举报
顶一个,太好了:lol
回复 使用道具 举报
顶顶顶:victory:
回复 使用道具 举报
我也来顶了!!!!
回复 使用道具 举报
顶,挺简单的,不过没时间敲
回复 使用道具 举报
青春印记深圳 来自手机 中级黑马 2015-5-23 00:36:13
97#
坑爹的。。。。
回复 使用道具 举报
顶一个先
回复 使用道具 举报
感觉还有技术方法没有学会不过也能解救而就是很麻烦啊
回复 使用道具 举报
  1. public class feibonaqi {
  2.         /**
  3.          * 1.遍历出斐波那契数列前100个数
  4.          */
  5.         public static void main(String[] args) {
  6.                 method_1(100);
  7.         }

  8.         public static int method(int i) {
  9.                 // 前两项不在通项范围
  10.                 if (i == 1 || i == 2) {
  11.                         // 前两项返回自身的值1
  12.                         return 1;
  13.                 } else {
  14.                         // 此数列从第三项开始每一项的值是前两项的和(规律)
  15.                         // 递归算法,在此方法之内调用本方法
  16.                         return method(i - 1) + method(i - 2);
  17.                 }
  18.         }

  19.         public static void method_1(int n) {
  20.                 // 此处i控制的是角标,n控制的是项数
  21.                 for (int i = 1; i <= n; i++) {
  22.                         System.out.println("这是斐波那契数列第" + i + "项");
  23.                         // 对根据项数对每一项进行遍历输出
  24.                         System.out.println(method(i));
  25.                 }
  26.         }
  27. }
复制代码
  1. /**
  2. * 2.任意定义一个数组,用for,while和递归三种方式求和
  3. */
  4. @SuppressWarnings("serial")
  5. public class AddDemo
  6. {
  7.         static int sum = 0;
  8.         static int flag =0;
  9.                 public static void main(String[] args)
  10.                 {
  11.                         int[] num = {4,6,8,2,10};
  12.                         //用for求和
  13.                         forAdd(num);
  14.                         //用while求和
  15.                         whileAdd(num);
  16.                 //用递归算法求和
  17.                                 recursionAdd(num);
  18.                                 System.out.println("recursionSum="+sum);
  19.                 }
  20.                
  21.    //用for循环求任意数组元素的和
  22.         public static void forAdd(int[] num)
  23.          {
  24.                 //初始化sum
  25.                 int sum = 0;
  26.                 //遍历输出数组元素
  27.                 for(int i=0;i<num.length;i++)
  28.                         {
  29.                         //求和
  30.                           sum = sum +num[i];
  31.                         }
  32.                 System.out.println("forSum="+sum);       
  33.                 }
  34.        
  35.         //用while循环求任意数组元素的和
  36.         public static void whileAdd(int[] num)
  37.         {
  38.                 //定义整型变量sum,i,并且初始化为0
  39.                 int sum = 0;
  40.                 int i = 0;
  41.                 //遍历输出数组元素
  42.                 while(i<num.length)
  43.                 {
  44.                         //求和
  45.                         sum = sum +num[i];
  46.                         //循环条件
  47.                         i++;
  48.                 }
  49.                 System.out.println("whileSum="+sum);       
  50.         }
  51.        
  52.         //用递归求任意数组元素的和
  53.         public static void recursionAdd(int[] num)
  54.         {
  55.                 //求和
  56.                 sum = sum +num[flag];
  57.                 //根据标记flag的变化,来取数组内元素
  58.             flag++;
  59.             //递归结束条件
  60.            if(flag<num.length)
  61.             {
  62.                     //递归算法
  63.                     recursionAdd(num);
  64.             }
  65.         }
  66. }
复制代码
  1. /**
  2. * 3.对于任意一个给定数组比如【1,23,56,7】,给出用数组元素能够拼出的最大整数,这里的结果为756231
  3. */
  4. public class FindMax {
  5.         public static void main(String[] args) {
  6.                 //定义int型数组
  7.        int[] arr = {1,23,56,7};
  8.        //调用拼数方法
  9.        method(arr);
  10.         }
  11.   @SuppressWarnings("unchecked")
  12.   //拼数方法
  13. public static void method(int[] arr)
  14.     {
  15.          String str=null;
  16.          //声明StringBuffer容器
  17.          StringBuffer sb = new StringBuffer();
  18.          //遍历数组
  19.          for(int in : arr)
  20.           {
  21.                  //将遍历后的元素添加到StringBuffer容器中,并且用空格分割
  22.                 str = sb.append(in+" ").toString();//toString()方法将容器中元素转换为字符串类型
  23.           }
  24.          //分割字符串
  25.          String[] str1 = str.split(" ");
  26.          //声明TreeSet集合并且使集合具有可比较性
  27.          TreeSet ts = new TreeSet(new MyCompare());
  28.          //遍历字符串,在其后加0使其达到相同的长度
  29.          for(int i=0;i<str1.length;i++)
  30.           {
  31.                  if(str1[i].length()==1)
  32.                  {
  33.                         str1[i]=str1[i]+"0";
  34.                  }
  35.                  //将具有相同长度的字符串添加到TreeSet集合中,方便比较
  36.                  ts.add(str1[i]);
  37.           }
  38.          //对TreeSet集合进行遍历
  39.          Iterator it = ts.iterator();
  40.          while(it.hasNext())
  41.          {
  42.                  String s3 = (String) it.next();
  43.                  //去掉遍历后字符串中存在的0
  44.                  String s4=s3.replaceAll("0", "");
  45.                  //打印结果
  46.                  System.out.print(s4);
  47.          }
  48.     }
  49. }
  50. @SuppressWarnings("unchecked")
  51. //自定义比较器
  52. class MyCompare implements Comparator
  53. {
  54.         public int compare(Object o1, Object o2) {
  55.                 String s1 = (String) o1;
  56.                 String s2 = (String) o2;
  57.                 if(Integer.parseInt(s1)> Integer.parseInt(s2))
  58.                   {
  59.                         return -1;
  60.                   }
  61.                 return 0;
  62.         }
  63. }
复制代码
  1. public class CrossDemo {

  2.         /**
  3.          * 5.编写一个交错排列元素的函数,比如["2","5","7"]和["a","c","e"]得到结果[2,a,5,c,7,e]
  4.          */
  5.         public static void main(String[] args) {
  6.                 String[] s1={"2","5","7"};
  7.         String[] s2={"a","c","e"};
  8.         crossMethod(s1,s2);
  9.         }
  10.    public static void crossMethod(String[] s1,String[] s2)
  11.      {
  12.            System.out.print("[");
  13.             for(int i= 0;i<s1.length;i++)
  14.              {
  15.                     System.out.print(s1[i]+","+s2[i]+",");
  16.              }
  17.             System.out.print("]");
  18.      }
  19. }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
Jaybor + 2 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马