黑马程序员技术交流社区

标题: 【阳哥专栏】技术分活动第10期 [打印本页]

作者: 王震阳老师    时间: 2014-8-11 12:00
标题: 【阳哥专栏】技术分活动第10期
本帖最后由 就业指导-王震阳老师 于 2014-8-18 11:06 编辑

声明:以后的技术分活动中的技术题,越来越偏向于数据结构、算法、JVM、多线程、高并发等,因此对于基础的要求也是更高的。
活动目的:练习javaSE知识,算法题。

活动奖励:最高3个技术分

结束时间:2014年8月15日,过期提交可能获取不到技术分!

代码提交要求:将自己的源代码压缩然后提交,提交的时候设置为管理员权限,以其他方式提交的答案无效。上交源码的时候不需要将整个工程项目压缩,只需将用到的源文件压缩即可。

题目类型:JavaSE 排列组合算法。

难易程度:容易

题目:老规矩,回帖领题

更多技术分活动:
【阳哥专栏】技术分活动第12期
http://bbs.itheima.com/thread-138162-1-1.html

【阳哥专栏】技术分活动第11期
http://bbs.itheima.com/thread-137632-1-1.html
【阳哥专栏】技术分活动第10期
http://bbs.itheima.com/thread-136866-1-1.html
【阳哥专栏】技术分活动第9期
http://bbs.itheima.com/thread-136465-1-1.html
【阳哥专栏】技术分活动第8期
http://bbs.itheima.com/thread-135781-1-1.html
【阳哥专栏】技术分活动第7期
http://bbs.itheima.com/thread-134321-1-1.html
【阳哥专栏】周末技术分活动第6期
http://bbs.itheima.com/thread-132893-1-1.html
【阳哥专栏】周末技术分活动第5期
http://bbs.itheima.com/thread-129859-1-1.html
【阳哥专栏】周末技术分活动第4期
http://bbs.itheima.com/thread-128854-1-1.html
【阳哥专栏】周末技术分活动第3期
http://bbs.itheima.com/thread-127326-1-1.html
【阳哥专栏】周末技术分活动第2期
http://bbs.itheima.com/thread-125800-1-1.html
【阳哥专栏】周末技术分派送活动第1期
http://bbs.itheima.com/thread-123979-1-1.html





作者: 尘埃落定    时间: 2014-8-11 12:07
看看题先。。
作者: 陈永赛    时间: 2014-8-11 12:12
老衲刚刚学习,圣旨驾到,也来接旨看看。:lol
作者: 冒牌高手    时间: 2014-8-11 12:33
必须得看一下啊
作者: Wokno    时间: 2014-8-11 12:39
路过看看。。。。。。。。。。。。。
作者: 狐狸FMF    时间: 2014-8-11 12:42
看看题
作者: justin1258    时间: 2014-8-11 12:48
来领题~~
作者: 瀚玉    时间: 2014-8-11 13:11
看看。。。。
作者: lpc4276139    时间: 2014-8-11 14:13
先瞅瞅题目
作者: 画了一个圈儿    时间: 2014-8-11 14:14
来领题啦,瞧一瞧能赚技术分的题是啥样子滴
作者: 萍水相逢    时间: 2014-8-11 14:14
领题,做一下
作者: ddewym123    时间: 2014-8-11 14:24
本帖最后由 ddewym123 于 2014-8-11 22:35 编辑

请查收!

排列组合.rar

1.31 KB, 阅读权限: 200, 下载次数: 1


作者: 逸晨    时间: 2014-8-11 14:35
领题做一下
作者: shijianws    时间: 2014-8-11 14:47
看看题目
作者: wangyang    时间: 2014-8-11 14:53
阳哥威武,继续领题
作者: gmz158    时间: 2014-8-11 15:40
领题                     
作者: huoshao008    时间: 2014-8-11 15:40
看看题先
作者: weity    时间: 2014-8-11 16:15
我看看,不知道能不能解题~
作者: 萍水相逢    时间: 2014-8-11 16:24
代码提交

FullSort.zip

93.62 KB, 阅读权限: 200, 下载次数: 2


作者: 马超(Andy)    时间: 2014-8-11 17:51
看看题目
作者: wangyang    时间: 2014-8-11 18:46
烦请阳哥查收!

Test10.zip

1.16 KB, 阅读权限: 200, 下载次数: 1

字符数组组合


作者: 王石    时间: 2014-8-11 20:19
看看题目

作者: yqj    时间: 2014-8-11 20:29
看看题!
作者: 吴杰栋    时间: 2014-8-11 20:31
拿个题目先
作者: cyc52tjm    时间: 2014-8-11 20:44
来看看题:lol
作者: 王石    时间: 2014-8-11 20:45
代码提交

Demo.rar

802 Bytes, 下载次数: 226

答案


作者: relive    时间: 2014-8-11 20:55
领题试炼!
作者: AntThinking_toT    时间: 2014-8-11 21:00
看一个。
作者: 叼哥    时间: 2014-8-11 21:28
回复看题
作者: huoshao008    时间: 2014-8-11 21:54
看了很长时间的递归算法才搞懂,望指正,谢谢.

Perm.zip

1.44 KB, 阅读权限: 200, 下载次数: 2


作者: 13155155528    时间: 2014-8-11 22:21
老办法,回帖看题
作者: yueyuanlin    时间: 2014-8-11 22:43
看一下吧

作者: lpc4276139    时间: 2014-8-11 22:47
本帖最后由 lpc4276139 于 2014-8-11 22:49 编辑

复制代码
怎么选择管理员可看。。。
作者: bbdeyouxang    时间: 2014-8-11 23:06
回帖取题
作者: S。。。。。F    时间: 2014-8-11 23:15
回帖:lol
作者: Mylan    时间: 2014-8-11 23:17
回帖看题
作者: 王震阳老师    时间: 2014-8-11 23:18
lpc4276139 发表于 2014-8-11 22:47
怎么选择管理员可看。。。

看题目中的说明。
作者: ﹑淼    时间: 2014-8-11 23:45
阿弥陀佛,施主,请开门

作者: yqj    时间: 2014-8-11 23:45
终于做完了,还有很多瑕疵,请阳哥指教(说明,1.txt文件为测试结果记录)

test.zip

113.65 KB, 阅读权限: 200, 下载次数: 1


作者: lhf_java    时间: 2014-8-11 23:52
学习一下
作者: 左脑想你    时间: 2014-8-12 00:11
看题拿分争取早日进黑马!黑马今天我为你骄傲明天你为我自豪
作者: bbdeyouxang    时间: 2014-8-12 00:29
交题!!!

GetCombination.rar

1.36 KB, 阅读权限: 200, 下载次数: 1


作者: WakeUp    时间: 2014-8-12 02:09
先瞧瞧题~~
作者: 小糊涂神    时间: 2014-8-12 09:40
,看看题
作者: 刘亚东    时间: 2014-8-12 10:52
回帖领题
作者: lpc4276139    时间: 2014-8-12 12:18
已经提交

Test5.rar

807 Bytes, 阅读权限: 200, 下载次数: 1

附上代码


作者: 喜爱    时间: 2014-8-12 13:14
来看看啊,好像最近比较频繁啊,有题目!
作者: li963309584    时间: 2014-8-12 14:06
领题,错过一期
作者: MeloX    时间: 2014-8-12 14:20
领题.............
作者: 炎星辰    时间: 2014-8-12 15:38
                                           领题
         
作者: 阿温    时间: 2014-8-12 16:20
虽然技术分够了,还是做做,领题!
作者: zeus00456    时间: 2014-8-12 16:29
排列组合?请题!

作者: weity    时间: 2014-8-12 17:03
本帖最后由 weity 于 2014-8-12 17:31 编辑

看看42期能不能赶上啊

ygzl.rar

4.33 KB, 阅读权限: 200, 下载次数: 1


作者: S。。。。。F    时间: 2014-8-12 19:36
提交:lol

sortArr.rar

1.17 KB, 阅读权限: 200, 下载次数: 1


作者: skyfly    时间: 2014-8-12 21:39
领取题目
作者: _童金辉    时间: 2014-8-12 21:44
来领分了
作者: 杜庆娇    时间: 2014-8-12 22:26
支持阳哥,
作者: zeus00456    时间: 2014-8-12 22:56
呈交解答,自认为是相对完善的版本了

里面附带一张示意图,用来说明思路,
代码各个已做详细注释
对程序全局的描述、第二种模式的实现以及测试结果都在代码前的文档注释中
请老师审阅。

要是能多赏1 2分多好啊
密码盘方式排列组合.rar (21.82 KB, 下载次数: 1)


作者: Mylan    时间: 2014-8-13 00:47
提交代码

Demo1.zip

906 Bytes, 阅读权限: 100, 下载次数: 1


作者: 小A    时间: 2014-8-13 00:48
我来领题了
作者: 刘亚东    时间: 2014-8-13 02:54
测试结果是啥意思?
作者: 王震阳老师    时间: 2014-8-13 09:07
刘亚东 发表于 2014-8-13 02:54
测试结果是啥意思?

就是在控制台打印的结果和你的测试代码。
作者: 小乖乖灬浩歌    时间: 2014-8-13 10:11
又一次前来领题目
作者: 喜爱    时间: 2014-8-13 10:40
好像有一点意思,时间花在组合上了,多次使用到了递归方法。。。。。

排列组合.rar

18.48 KB, 阅读权限: 100, 下载次数: 1


作者: 沿途小将    时间: 2014-8-13 12:40
我来领题啦
作者: 左脑想你    时间: 2014-8-13 13:27
嘿嘿 ,由于还在上传智基础班做的不好的地方,您给指点一下
运行结果直接写在注释里面了嘿嘿

左脑想你技术分.rar

817 Bytes, 阅读权限: 100, 下载次数: 4


作者: 杨庆雷    时间: 2014-8-13 18:17
领题了      
作者: ljl623786058    时间: 2014-8-13 19:28
路过。。。
作者: fxwb2005    时间: 2014-8-13 20:51
看看题目先
作者: 沿途小将    时间: 2014-8-13 21:04
本帖最后由 沿途小将 于 2014-8-15 13:31 编辑

以后还要这种好事,直接找我

MyDemo.rar

226.6 KB, 阅读权限: 200, 下载次数: 2


作者: 沿途小将    时间: 2014-8-13 21:07
本帖最后由 沿途小将 于 2014-8-15 13:29 编辑

好像前一次提交错啦!

MyDemo.rar

226.6 KB, 阅读权限: 200, 下载次数: 1


作者: ┣┫流枫    时间: 2014-8-13 21:26
前来领题
作者: tonglingwang    时间: 2014-8-13 21:54
我又来领题了,这回希望能做下

作者: ┣┫流枫    时间: 2014-8-13 21:57
提交代码

Desktop.zip

33.44 KB, 阅读权限: 100, 下载次数: 1


作者: Vista    时间: 2014-8-13 23:27
先看看题吧
作者: yesecongcong    时间: 2014-8-13 23:31
回复领题
作者: fantacyleo    时间: 2014-8-14 00:09
看看是神马题目
作者: 常乃伟    时间: 2014-8-14 00:30
来试试题目!!!!!!!!
作者: 无奈的年华ˊ    时间: 2014-8-14 00:33
看下                     
作者: 반야_바라_밀    时间: 2014-8-14 08:02
必须看一下
作者: 祝幸福    时间: 2014-8-14 08:29
祝幸福,如果您要查看本帖隐藏内容请回复








作者: 반야_바라_밀    时间: 2014-8-14 10:10
楼主大好人,抽空看一下吧。

Sort.rar

13.03 KB, 阅读权限: 200, 下载次数: 1

全排列算法


作者: 孙小亚    时间: 2014-8-14 11:34
来学习!
作者: hsy    时间: 2014-8-14 12:56
不知题目如何?
作者: 孙小亚    时间: 2014-8-14 13:56
代码+测试结果提交

排列.rar

19.66 KB, 阅读权限: 200, 下载次数: 2


作者: Stevenj    时间: 2014-8-14 14:19
辛苦了,二师兄
作者: lvlv    时间: 2014-8-14 15:03
学习学习,看看效果 ,怎么样
作者: 天邃任我桓    时间: 2014-8-14 16:06
哪怕不会写,我也想看看题目是怎样的,然后思考怎么做,期望一个月后能写出!
作者: 王石    时间: 2014-8-14 17:17
代码提交

Demo.rar

802 Bytes, 阅读权限: 200, 下载次数: 1

答案


作者: 奋斗的小耗子    时间: 2014-8-14 18:53
领题                                
作者: 迷失的独白    时间: 2014-8-14 19:53
先下下来看看,学习一下
作者: 喜爱    时间: 2014-8-14 19:53
还以为和以前一样了!就直接以版主的权限了。。。

排列组合.rar

18.48 KB, 阅读权限: 200, 下载次数: 1


作者: 逸晨    时间: 2014-8-14 21:29
请查收!

Permutation.zip

1.78 KB, 阅读权限: 200, 下载次数: 1


作者: Justfeeling    时间: 2014-8-14 21:33
先看看题目先!
作者: EarlyHeart    时间: 2014-8-14 23:08
拿来做做看
作者: Fengs    时间: 2014-8-15 10:42
回帖领题呀
作者: 占星释    时间: 2014-8-15 11:07
看一看呀
作者: justin1258    时间: 2014-8-15 12:31
交题领技术分喽~~

Permutation.rar

1.3 KB, 阅读权限: 200, 下载次数: 1


作者: 王震阳老师    时间: 2014-8-15 14:10
逸晨 发表于 2014-8-14 21:29
请查收!

挺好:
  1. /*
  2. 需求:

  3. 将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的
  4. 排列组合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。要求:用户输入一个
  5. 整数(0到9)数组(数组长度大于等于3,小于10),那么请在控制台打印出该数组
  6. 中所有成员的排列组合。详细代码+测试结果才可获得满分。

  7. */

  8. import java.util.*;

  9. class PermutationDemo
  10. {

  11.         public static void main(String[] args)
  12.         {
  13.                 String str = null;
  14.                 str = input(str);
  15.                

  16.                 char[] arr = str.toCharArray();

  17.                 int start = 0;  
  18.                 int end = arr.length-1;
  19.                
  20.                 System.out.println("您输入的整数数组的排列组合结果为:");
  21.                 perm(arr, start, end);
  22.         }
  23.        
  24.         //input方法:用于用户输入数组。
  25.         public static String input(String str)
  26.         {
  27.                 boolean flag = true;
  28.                 System.out.println("请输入一个0到9的整数数组,数字之间不要有空格");
  29.                 Scanner sc = new Scanner(System.in);

  30.                 str = sc.next();
  31.                 if(str.length()>= 10 || str.length()<3)
  32.                 {
  33.                         System.out.println("您输入的数组长度不正确,数组的长度应大于等于3,小于10");
  34.                         str = input(str);
  35.                 }

  36.                 flag = judge(str);
  37.                 if(flag==false) str = input(str);
  38.                 return str;
  39.         }
  40.        
  41.         //judge方法:用于判断输入的是否是整数数组。如果把这个方法去掉,input关于flag的地方去掉可以对字母或是符号进行排列组合。
  42.         public static boolean judge(String str)
  43.         {
  44.                 for(int i = 0; i<str.length(); i++)
  45.                 {
  46.                         char c = str.charAt(i);
  47.                         if(c>='0' && c<='9');
  48.                         else   
  49.                         {       
  50.                                 System.out.println("您输入的不是整数数组。");
  51.                                 return false;
  52.                         }
  53.                 }
  54.                 return true;
  55.         }

  56.         //perm方法:用递归的方式对数组中的元素进行排列组合。
  57.         public static void perm(char[] arr, int start, int end)
  58.         {
  59.                 int i;
  60.                
  61.                 if(start == end)
  62.                 {
  63.                         for(i = 0; i <= end; i++)
  64.                         {
  65.                                 System.out.print(arr[i]+" ");
  66.                         }
  67.                         System.out.println();
  68.                 }
  69.                 else
  70.                 {
  71.                         for(i = start; i <= end; i++)
  72.                         {
  73.                                 swap(arr,i,start);
  74.                                 perm(arr,start+1,end);
  75.                                 swap(arr,i,start);
  76.                         }
  77.                 }
  78.         }
  79.        
  80.         //swap方法:交换数组中的两个元素。
  81.         public static void swap(char[] arr, int a, int b)
  82.         {
  83.                 char temp = arr[a];
  84.                 arr[a] = arr[b];
  85.                 arr[b] = temp;       
  86.         }

  87. }
复制代码

作者: 王震阳老师    时间: 2014-8-15 14:11
喜爱 发表于 2014-8-14 19:53
还以为和以前一样了!就直接以版主的权限了。。。

挺好:
  1. package com.itheima.grup;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. /**
  6. *
  7. * @author 喜爱
  8. * 将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。
  9. * 要求:用户输入一个整数(0到9)数组(数组长度大于等于3,小于10),那么请在控制台打印出该数组中所有成员的排列组合。
  10. * 详细代码+测试结果才可获得满分。
  11. */
  12. public class DataGrupDemo {

  13.   public static void main(String[] args) {
  14.     noticeWord(1,null);
  15.     String line = inputData();
  16.     line = verifyStr(line);
  17.     noticeWord(3,line);
  18.     String[] str = line.split(",");   
  19.     noticeWord(4,"您输入的" + str.length +"个数据,最终排列组合有:");
  20.     sortGrup(str,0,str.length - 1);
  21.   }

  22.   /**
  23.    * 排序组合方法
  24.    * @param str 组合数组
  25.    * @param start 开始位置
  26.    * @param end 结束位置
  27.    */
  28.   private static void sortGrup(String[] str, int start, int end) {
  29.     if (start == end) {
  30.       // 当只要求对数组中一个数字进行全排列时,只要就按该数组输出即可
  31.       for (int i = 0; i <= end; i++) {
  32.         System.out.print(str[i] + " ");
  33.       }
  34.       System.out.println();
  35.     } else {
  36.       // 多个数字全排列
  37.       for (int i = start; i <= end; i++) {
  38.        // 交换数组第一个元素与后续的元素
  39.         String temp = str[start];
  40.         str[start] = str[i];
  41.         str[i] = temp;

  42.         // 后续元素递归全排列
  43.         sortGrup(str, start + 1, end);

  44.         // 将交换后的数组还原
  45.         temp = str[start];
  46.         str[start] = str[i];
  47.         str[i] = temp;
  48.       }
  49.     }
  50.   }

  51.   /**
  52.    * 校验数据的组合
  53.    * @param line 输入的数据
  54.    * @return String  
  55.    */
  56.   private static String verifyStr(String line){
  57.     //当然输入的是为空 时候,打印提示信息,要求重新输入
  58.     while(line == null || "".equals(line)){
  59.       noticeWord(2,null);
  60.       noticeWord(1,null);
  61.       line = inputData();
  62.     }
  63.    
  64.     //对数据的数据进行校验,检查输入的内容是否是整数
  65.     String[] str = line.split(",");
  66.     String regex = "[0-9]+";
  67.     for (String string : str) {
  68.       if(!string.matches(regex)){
  69.         noticeWord(2,null);
  70.         noticeWord(1,null);
  71.         line = inputData();
  72.         line = verifyStr(line);
  73.         break;
  74.       }
  75.     }
  76.     //判断输入的数据的个,确保输入的数据个数在[3,10)之间
  77.     if(str.length < 3 || str.length >= 10){
  78.       noticeWord(2,null);
  79.       noticeWord(1,null);
  80.       line = inputData();
  81.       line = verifyStr(line);
  82.     }
  83.     //最终返回数据
  84.     return line;
  85.   }

  86.   /**
  87.    * 接收输入数据的方法
  88.    * @return String
  89.    */
  90.   private static String inputData() {
  91.     BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
  92.     String line = null;
  93.     try {
  94.       line = bufferReader.readLine();
  95.     } catch (IOException e) {
  96.       throw new RuntimeException("读取数据失败。。。");
  97.     }
  98.     return line;
  99.   }
  100.   
  101.   /**
  102.    * 提示信息的方法
  103.    * @param index
  104.    * @param temp
  105.    */
  106.   private static void noticeWord(int index,String temp){
  107.     switch (index) {
  108.     case 1:
  109.       System.out.println("请输入一组整数数据,要求数据的个数大于等于3个,小于10个,数据之间使用 ','(逗号使用英文状态下的符号,输完请回车):");
  110.       break;
  111.     case 2:
  112.       System.out.println("您输入有误,请重新输入!");
  113.       break;
  114.     case 3:
  115.       System.out.println("您输入的一组数据是:" + temp);
  116.       break;
  117.     case 4:
  118.       System.out.println(temp);
  119.       break;
  120.     }
  121.   }
  122. }
复制代码





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