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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王震阳老师   /  2014-8-11 12:00  /  17973 人查看  /  214 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

祝幸福,如果您要查看本帖隐藏内容请回复







回复 使用道具 举报
楼主大好人,抽空看一下吧。

Sort.rar

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

全排列算法

评分

参与人数 1技术分 +3 收起 理由
王震阳老师 + 3 赞一个!

查看全部评分

回复 使用道具 举报
来学习!
回复 使用道具 举报
hsy 中级黑马 2014-8-14 12:56:04
84#
不知题目如何?
回复 使用道具 举报
代码+测试结果提交

排列.rar

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

评分

参与人数 1技术分 +3 收起 理由
王震阳老师 + 3 赞一个!

查看全部评分

回复 使用道具 举报
辛苦了,二师兄
回复 使用道具 举报
lvlv 初级黑马 2014-8-14 15:03:12
87#
学习学习,看看效果 ,怎么样
回复 使用道具 举报
哪怕不会写,我也想看看题目是怎样的,然后思考怎么做,期望一个月后能写出!
回复 使用道具 举报
代码提交

Demo.rar

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

答案

评分

参与人数 1技术分 +2 收起 理由
王震阳老师 + 2 赞一个!

查看全部评分

回复 使用道具 举报
领题                                
回复 使用道具 举报
先下下来看看,学习一下
回复 使用道具 举报
还以为和以前一样了!就直接以版主的权限了。。。

排列组合.rar

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

评分

参与人数 1技术分 +3 收起 理由
王震阳老师 + 3 赞一个!

查看全部评分

回复 使用道具 举报
请查收!

Permutation.zip

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

评分

参与人数 1技术分 +3 收起 理由
王震阳老师 + 3 赞一个!

查看全部评分

回复 使用道具 举报
先看看题目先!
回复 使用道具 举报
拿来做做看
回复 使用道具 举报
Fengs 中级黑马 2014-8-15 10:42:56
96#
回帖领题呀
回复 使用道具 举报
占星释 来自手机 中级黑马 2014-8-15 11:07:42
97#
看一看呀
回复 使用道具 举报
交题领技术分喽~~

Permutation.rar

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

评分

参与人数 1技术分 +3 收起 理由
王震阳老师 + 3 赞一个!

查看全部评分

回复 使用道具 举报

挺好:
  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-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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马