黑马程序员技术交流社区

标题: 领题,领币,给需要的童鞋 [打印本页]

作者: Jaybor    时间: 2015-5-21 20:29
标题: 领题,领币,给需要的童鞋
本帖最后由 Jaybor 于 2015-5-24 00:37 编辑

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~
ps:现在上海66期安卓,有问题可以问,不过估计得很晚才能回复~

这里可能大多数童鞋都在第4题卡住了,我从网上拷了答案给大家(解法就是普通的暴力遍历,主要是递归理解起来有点头疼):
对这里的递归可以这样理解:


  1. public class Demo
  2. {
  3.     static char operator[] = new char[8];
  4.     static char expre[] = new char[]
  5.     { '1', '+', '2', '+', '3', '+', '4', '+', '5', '+', '6', '+', '7', '+',
  6.             '8', '+', '9' };

  7.     public static void main(String[] args)
  8.     {
  9.         fun(0);
  10.     }

  11.     public static void fun(int n)
  12.     {
  13.         if (8 == n)
  14.             handle(100);
  15.         else
  16.         {
  17.             /*
  18.                             这里的递归原理是:
  19.                             1.注意观察我标记的断点位置,n从0-7断点以下的程序都是没有机会执行的。
  20.                             2.当n=7的时候程序会从断点开始继续往下运行,然后是n=6(3*3种情况),5(3*3*3种情况),4,3,,,0(3的8次方)
  21.                             3.这个复杂递归的原理在于实现3的8次方种可能性。
  22.                             4.这里用*号代替空,不要以为是错的。。。。   
  23.             */
  24.             operator[n] = '+';
  25.             expre[n * 2 + 1] = operator[n];
  26.             fun(n + 1);//-------------断点----------------
  27.             operator[n] = '-';
  28.             expre[n * 2 + 1] = operator[n];
  29.             fun(n + 1);
  30.             operator[n] = '*';
  31.             expre[n * 2 + 1] = operator[n];
  32.             fun(n + 1);
  33.         }
  34.     }

  35.     private static void handle(int n)
  36.     {
  37.         StringBuffer sb = new StringBuffer();
  38.         // 将乘法替换成空格
  39.         for (int i = 0; i < expre.length; i++)
  40.             if (expre[i] != '*')
  41.                 sb.append(expre[i]);
  42.         String expression = sb.toString();
  43.         // 分割等式, 先根据运算符分割
  44.         String[] num = expression.split("[+-]");
  45.         // 根据数字,分割出其中的运算符
  46.         String[] operator = expression.split("[1-9]");

  47.         int sum = Integer.parseInt(num[0]);

  48.         for (int i = 0, j = 1; i < operator.length; i++)
  49.         {
  50.             if (operator[i].equals("+"))
  51.                 sum += Integer.parseInt(num[j++]);
  52.             if (operator[i].equals("-"))
  53.                 sum -= Integer.parseInt(num[j++]);
  54.         }

  55.         if (sum == n)
  56.             System.out.println(expression + "=" + n);
  57.     }

  58. }
复制代码
其他题目个人觉得都不难,所以也不想拷代码了;进黑马要学的东西太多,我也没什么时间来论坛了,大家权且拿这些题练练手;
如果有什么入学的问题可以问我,还有你们如果想提交答案啥的可以提交,我如果上论坛了必定会给答题的小伙伴分的哈哈,
毕竟我知道攒黑马币的不易,就这样吧,我得睡了,明天还得上课呢!



作者: 守株人    时间: 2015-5-21 20:43
顶下,看大神解答
作者: 赵桂勇    时间: 2015-5-21 20:46
强烈支持!
作者: 飘的云    时间: 2015-5-21 20:47
不回答也可以领的?顶一个先:lol
作者: yky1678    时间: 2015-5-21 20:49
顶一个

作者: lanbo    时间: 2015-5-21 20:55
认真看了题目
作者: sss18310878521    时间: 2015-5-21 20:58
我顶一个
作者: 不能不改变    时间: 2015-5-21 21:03
第四个是直接穷举么~
作者: 徐文豪    时间: 2015-5-21 21:09
斐波那契数列  这个是什么数?都没听过  还有后面的两道也不会  郁闷
作者: 1014914737    时间: 2015-5-21 21:13
只是认真看了下题目:)
作者: kontar    时间: 2015-5-21 21:13
下次回复,我就是写代码了!!!!
作者: sky930722    时间: 2015-5-21 21:16
先看看题目.
作者: lzh2015    时间: 2015-5-21 21:21
兼职堪比开个唱啊
作者: 张清华    时间: 2015-5-21 21:22
我也顶一下,看大神回答
作者: 大爱卓生    时间: 2015-5-21 21:27
还不会~~~~
作者: lily15    时间: 2015-5-21 21:29
来看看题目
作者: 追梦德鲁    时间: 2015-5-21 21:31
围观大神 前来支持
作者: xingfeichen    时间: 2015-5-21 21:34
看着好像不难
作者: 开弓没有回头箭    时间: 2015-5-21 21:39
看看题目,领点币
作者: 柳叶飞刀    时间: 2015-5-21 21:41
徐文豪 发表于 2015-5-21 21:09
斐波那契数列  这个是什么数?都没听过  还有后面的两道也不会  郁闷

就是那个兔子生仔的案例,可以看看,很经典的
作者: 徐文豪    时间: 2015-5-21 21:44
我估计就会第二道  求和的那个 其他的都没听过  一点头绪都没有
作者: 柳叶飞刀    时间: 2015-5-21 21:47
第四个没有思路。。。。
作者: 探索者    时间: 2015-5-21 21:50
支持一下
作者: 1315317959    时间: 2015-5-21 21:52
顶一下,围观大神
作者: zhangjnia    时间: 2015-5-21 22:03
就是来看看题目,还好
作者: Animal    时间: 2015-5-21 22:06
好帖.......................................
作者: msxhm    时间: 2015-5-21 22:06
努力完成,加油!
作者: 笑爷    时间: 2015-5-21 22:08
顶一个!!
作者: a397131103    时间: 2015-5-21 22:09
怎么领币
作者: GA_瑜    时间: 2015-5-21 22:14
目前有些还没有学到,不过还是了解了
作者: hellotaomi    时间: 2015-5-21 22:19
已经等不及想看大神的解答了
作者: zhubingg    时间: 2015-5-21 22:27
有几个会 做做试试
作者: 大熊    时间: 2015-5-21 23:08
好题   顶
作者: 星辉祝愿    时间: 2015-5-21 23:14
来领题了
作者: 龙腾浩少    时间: 2015-5-21 23:34
哥们,黑马论坛和申请入学的报名系统帐号没有绑定吧?
作者: MikePortnoy    时间: 2015-5-21 23:43
顶一下 看看
作者: yogkin    时间: 2015-5-21 23:43
我来试试,看着好像不是很难
作者: 代码搬运1号    时间: 2015-5-21 23:51
赞一个!!!!!!!
作者: 姬光普    时间: 2015-5-21 23:53
先顶一下再说
作者: 青春印记深圳    时间: 2015-5-21 23:57
加油加油加油
作者: 青春印记深圳    时间: 2015-5-21 23:58
说好的币币呢?骗人进来的。
作者: chencanhui    时间: 2015-5-22 00:07
看题目      求解
作者: hydrogen11    时间: 2015-5-22 00:09
围观一下题目, 学习学习
作者: sunxiaohong    时间: 2015-5-22 00:10
坐等大神回复。
新手一枚飘过。
作者: luxinyu    时间: 2015-5-22 00:14
看下。有时间琢磨下
作者: LoveMyself    时间: 2015-5-22 00:55
感觉题目还可以,领了
作者: LoveMyself    时间: 2015-5-22 00:56
徐文豪 发表于 2015-5-21 21:09
斐波那契数列  这个是什么数?都没听过  还有后面的两道也不会  郁闷

从第三项开始,第三项是第一项和第二项的和,第四项是第二项和第三想的和,以此类推
作者: 黄冬    时间: 2015-5-22 01:38
绝世好贴,顶一下先。。。
作者: guoyangpeng    时间: 2015-5-22 06:42
瞧一瞧,貌似可以做
作者: 新缘    时间: 2015-5-22 06:45
赞一个。。。
作者: qian0217wei    时间: 2015-5-22 06:56
我来看看哪!66期开班了,加油啊!我过几天也去上海!
作者: niuapp    时间: 2015-5-22 07:18
这题有意思啊,(┯_┯)
作者: 栗新岩    时间: 2015-5-22 08:24
顶一个,看大神解答
作者: 王建伟    时间: 2015-5-22 08:32
顶顶啊。。。。。。。
作者: 公子小白    时间: 2015-5-22 11:04
NO.1

斐波那契数列的通项公式:f(n)=1(n=1||n=2) ①; f(n)=f(n-1)+f(n-2)(n>2) ②

public class Fibonacci {
       

        public static int fib(int n) {
                if (n == 1 || n == 2) {
                        return 1;
                } else {
                        return fib(n - 1) + fib(n - 2);
                }
        }

        public static void fibonacci(int n) {
                for (int x = 1; x < n; x++) {
                        if (x < (n - 1)) {
                                System.out.print(fib(x) + ",");  
                        }else{
                                System.out.println(fib(x));
                        }
                }
        }
        public static void main(String[] args) {
                fibonacci(100);
        }
}

作者: wwl0517    时间: 2015-5-22 11:15
看解答!
作者: cunbai    时间: 2015-5-22 11:15
围观 看看题目 学习学习
作者: 灯火通明    时间: 2015-5-22 12:12
领题,学习了
作者: wangkai    时间: 2015-5-22 12:18
顶一下!
作者: 张亚超2015    时间: 2015-5-22 12:19
期待大神的回帖
作者: 冷雨敲窗被未温    时间: 2015-5-22 12:29
为分每天必水。
作者: 冷雨敲窗被未温    时间: 2015-5-22 12:30
为币每天必水。
作者: ddddk    时间: 2015-5-22 12:49
让我来练习一下
作者: sxsxsx    时间: 2015-5-22 14:13
支持支持
作者: wx_yTUQXu69    时间: 2015-5-22 14:14
支持一下
作者: hkbat    时间: 2015-5-22 14:28
来看看!!!
作者: qinpeiwei881211    时间: 2015-5-22 14:35
顶了:loveliness:
作者: Huylens    时间: 2015-5-22 14:52
能把你的解题思路贴出来,大家探讨,就更好了
作者: herojing    时间: 2015-5-22 14:54
这些题目貌似不难啊
作者: yokii83    时间: 2015-5-22 15:30
炸了。一个都听不懂,怎么破。
作者: 李志鹏    时间: 2015-5-22 18:03
斐波那契数列,就没见过
作者: Mr7952    时间: 2015-5-22 18:09
那边房源很紧张吗
作者: L番茄X    时间: 2015-5-22 20:23
我写我会的.
class Demo
{
   public static void main(String[] args)
{
    int[] arr = {92,38,48};
     for(int i ; i< arr.length;i++){
         int temp = arr[i];
          temp +=arr[i];
     不会了.
  
作者: zdh    时间: 2015-5-22 20:35
顶一个~拿回来练练
作者: shentan000    时间: 2015-5-22 21:24
顶一个~~!~!~
作者: shentan000    时间: 2015-5-22 21:26
顶一个~~!~!~
作者: 郭.威    时间: 2015-5-22 21:27
顶一下   大神啊
作者: 你们敬爱的人    时间: 2015-5-22 21:31
貌似还能做点...
作者: zdh    时间: 2015-5-22 21:32
顶下,有入学题库不?
作者: yang2015    时间: 2015-5-22 21:45
我顶一个
作者: 卡布    时间: 2015-5-22 22:23
看看大神
作者: !85684009ex    时间: 2015-5-22 22:24
膜拜大声!求黑马币!
作者: as604049322    时间: 2015-5-22 22:33
本来只是求点黑马币,结果被第四题虐了,,整了快一晚上。。。


  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. }

复制代码

作者: 执剑、砍人    时间: 2015-5-22 22:34
必须支持!!!
作者: as604049322    时间: 2015-5-22 23:05
发第四题代码:

  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. }
复制代码

作者: 候长亮    时间: 2015-5-22 23:08
顶一下能领吗?我的黑马怎么还减少了4个。
作者: gainn    时间: 2015-5-22 23:19
先领题,周日做出来贴上
作者: JavaStudy770    时间: 2015-5-22 23:23
第四题有点难度
作者: zxj35986847    时间: 2015-5-22 23:25
没有回答的吗?  有空做做,

现在没时间啊,天天敲代码都敲不过来..
作者: wwb1105    时间: 2015-5-22 23:29
顶一下  坐等大神回复
作者: 914360849    时间: 2015-5-22 23:39

/*
* 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);
        }

}

作者: 挖煤黑小伙    时间: 2015-5-22 23:40
不错的帖子
作者: 高强520    时间: 2015-5-22 23:41
顶一个,太好了:lol
作者: 张海旭    时间: 2015-5-22 23:57
顶顶顶:victory:
作者: 喻忠航    时间: 2015-5-23 00:03
我也来顶了!!!!
作者: 林思奇    时间: 2015-5-23 00:10
顶,挺简单的,不过没时间敲
作者: 青春印记深圳    时间: 2015-5-23 00:36
坑爹的。。。。
作者: 进击的蜗牛    时间: 2015-5-23 00:44
顶一个先
作者: java8023    时间: 2015-5-23 01:16
感觉还有技术方法没有学会不过也能解救而就是很麻烦啊
作者: LoveMyself    时间: 2015-5-23 02:15
  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. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2