黑马程序员技术交流社区

标题: 一道面试题 求解 [打印本页]

作者: 爱吃柠檬    时间: 2016-8-24 23:01
标题: 一道面试题 求解
已知有1,2,3,4四个数字,求他们组合的形式有多少种?
要求:不能有重复的数。
需求1:
        组合方式有多少种?  
需求2:
        如果在上个需求上改进下:  4不能开头,1和3不能挨着,有多少种情况?
        {:2_31:}
作者: li--yong    时间: 2016-8-24 23:06
你确定不是数学题?
作者: 水月灬清影    时间: 2016-8-24 23:09
一:24
二:10
为什么总扎堆问问题?
作者: 爱吃柠檬    时间: 2016-8-24 23:12
li--yong 发表于 2016-8-24 23:06
你确定不是数学题?

把数学题代码化
作者: 爱吃柠檬    时间: 2016-8-24 23:14
水月灬清影 发表于 2016-8-24 23:09
一:24
二:10
为什么总扎堆问问题?

代码化
作者: LLL_LLL    时间: 2016-8-24 23:17
高中的排列组合
作者: abcdefg11    时间: 2016-8-24 23:51
这么水帖不好吧!
作者: gohw007    时间: 2016-8-24 23:52
1.24  2。10
作者: 一不小心    时间: 2016-8-24 23:57
原理是排列组合
作者: 袁志娜    时间: 2016-8-24 23:59
排序就可以
作者: 阿卜    时间: 2016-8-25 17:47
好像这个是最笨的做法……再想想

[Java] 纯文本查看 复制代码
public class Practice {
        public static void main(String[] args) {
                int count = 1;
                for(int g = 1;g <= 4 ; g++) {
                        for(int s = 1; s <= 4; s++) {
                                for(int b = 1; b < 5; b++) {
                                        for(int q = 1; q < 5 ; q++) {
                                                if(g != s && g != b && g != q && s != b && s != q && b != q){
//                                                        需求2
//                                                        if(q != 4) {
//                                                                if((q + b) != 4 && (b + s) != 4 && (s + g) != 4)
                                                                System.out.println(count++ + ":" + (1000 * q + 100 * b + 10 * s + g));
//                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
}

作者: 惊鸿游龙    时间: 2016-8-25 18:52
楼上威武
作者: 醉梦乘风    时间: 2016-8-25 18:56
11楼 - -!膜拜
作者: 胡eason    时间: 2016-8-25 19:25
public static void main(String[] args) {
                int count = 0;
               
                for(int i = 1;i <=4;i++){
                        for(int j = 1;j<=4;j++){
                                for(int k= 1;k<=4;k++){
                                        for(int l= 1;l<=4;l++){
                                                if((i!=j)&&(i!=k)&&(i!=l)&&(j!=i)&&(j!=k)&&(j!=l)&&(k!=i)&&(k!=j)&&(k!=l)&&(l!=i)&&(l!=j)&&(l!=k)){
                                                count++;
                                                System.out.println(i+""+j+""+k+""+l);
                                                }
                                        }
                                }
                        }
                }
                System.out.println(count);
作者: 胡eason    时间: 2016-8-25 19:26
        public static void main(String[] args) {
                int count = 0;
               
                for(int i = 1;i <=4;i++){
                        for(int j = 1;j<=4;j++){
                                for(int k= 1;k<=4;k++){
                                        for(int l= 1;l<=4;l++){
                                                if((i!=4)&&(i!=j)&&(i!=k)&&(i!=l)&&(j!=i)&&(j!=k)&&(j!=l)&&(k!=i)&&(k!=j)&&(k!=l)&&(l!=i)&&(l!=j)&&(l!=k)){
                                               
                                                String s = i+""+j+""+k+""+l;
                                               
                                                if(s.contains("13")||s.contains("31")){
                                                        continue;
                                                       
                                                        }       
                                                System.out.println(s);
                                                        count++;
                                       
                                                }
                                        }
                                }
                        }
                }
                System.out.println(count);
        }
       
}
作者: 惊鸿游龙    时间: 2016-8-25 20:18
阿卜 发表于 2016-8-25 17:47
好像这个是最笨的做法……再想想

[mw_shl_code=java,true]public class Practice {

定义count的意义是什么?
作者: 阿卜    时间: 2016-8-26 11:42
惊鸿游龙 发表于 2016-8-25 20:18
定义count的意义是什么?

题目不是要求解多少种组合吗……难道打印出来了一个一个数?
作者: heimaljx    时间: 2016-8-26 11:49
最简单的数学题.上过高中就会了
作者: yuanxianzhi    时间: 2016-8-26 14:27
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
                // TODO Auto-generated method stub
                int g = 0;
                int s = 0;
                int b = 0;
                int q = 0;
                int count = 0;
                for (int i = 0; i <= 4321; i++) {
                        g = i % 10;
                        s = i % 100 / 10;
                        b = i % 1000 / 100;
                        q = i / 1000;
                        if (g < 5 && g > 0 && s < 5 && s > 0 && b < 5 && b > 0 && q < 5 && q > 0) {
                                if (g != s && g != b && g != q && s != b && s != q && b != q) {
//                                        if (q != 4 && g + s != 4 && s + b != 4 && b + q != 4) {
                                        count++;
                                        System.out.print(i + " ");
//                                        }
                                }
                        }
                }
                System.out.println("一共" + count);

        }


作者: gsa798780633    时间: 2016-8-26 19:42
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test4 {
public static void main(String[] args) {
        String src="1234";
        ArrayList<String>list=new ArrayList<>();
        String s=src.charAt(0)+"";
        list.add(s);
        for (int i = 1; i < src.length(); i++) {
                List<String> list2=new ArrayList<String>();
                list2.addAll(list);
                list.clear();
               //遍历string和list集合,每次将后面的一个字符插入到前面的字符串中,清空以前的list结果,并得到新的结果
                for (int j = 0; j <list2.size(); j++) {
                        String string=list2.get(j);
                        add(string, src.charAt(i),list);
                }
               
        }
        //将结果从大到小输出
        Collections.sort(list);
        Collections.reverse(list);
        System.out.println(list);
}
//该方法将指定的字符添加到一个字符串的任意位置,如将4添加到123中,得到集合结果4123,1423,1243,1234
public static List<String> add(String src, char c,ArrayList<String>list){
        for (int i = 0; i < src.length()+1; i++) {
                //把c添加到src的索引i处
                String s=src.substring(0,i)+c+src.substring(i);
                list.add(s);
        }
        return list;
}
}
可能看不懂,可以自己调试看步骤,
第2问只需要在集合结果中遍历,踢掉不符合要求的元素即可

作者: 惊鸿游龙    时间: 2016-8-26 22:39
阿卜 发表于 2016-8-26 11:42
题目不是要求解多少种组合吗……难道打印出来了一个一个数?

嗯嗯,明白了,刚开始学有点蒙
作者: 惊鸿游龙    时间: 2016-8-26 22:40
阿卜 发表于 2016-8-26 11:42
题目不是要求解多少种组合吗……难道打印出来了一个一个数?

嗯嗯,明白了,刚开始学有点蒙
作者: 惊鸿游龙    时间: 2016-8-26 22:42
阿卜 发表于 2016-8-26 11:42
题目不是要求解多少种组合吗……难道打印出来了一个一个数?

嗯嗯,明白了,刚开始学有点蒙
作者: 爱吃柠檬    时间: 2016-8-26 22:52
阿卜 发表于 2016-8-25 17:47
好像这个是最笨的做法……再想想

[mw_shl_code=java,true]public class Practice {

多谢
作者: 爱吃柠檬    时间: 2016-8-26 22:54
gsa798780633 发表于 2016-8-26 19:42
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

多谢
作者: gohw007    时间: 2016-8-27 00:10
好好想想啊
作者: chensc    时间: 2016-8-27 07:17
学习学习!
作者: cdw999888    时间: 2016-8-27 09:26
看起来好号复杂的样子!
作者: absvir    时间: 2016-8-27 22:25
排列组合?
作者: yangguangyulei    时间: 2016-8-27 22:40
有点难啊
作者: aabbcc2    时间: 2016-8-27 22:50
支持一下
作者: jiubaK    时间: 2016-8-27 23:42
[Java] 纯文本查看 复制代码
class Test {
        public static void main(String[] args){
                int cnt2 = fun01("", "1234");
                System.out.println("cnt: "+cnt2);
                int cnt3 = fun02("", "1234");
                System.out.println("cnt: "+cnt3);
        }
        public static int fun01(String res, String source){
                if ( res.length() >= source.length()) {                //保证长度                       
                        //System.out.println(res);
                        return 1;
                }
                int cnt = 0;
                for ( char c : source.toCharArray() ) {
                        if ( res.contains( c+"" ) ) {                        //保证不重复
                                continue;
                        }
                        cnt += fun01(res+c, source);
                }
                return cnt;
        }
        public static int fun02(String res, String source){
                if ( res.length() >= source.length()) {                //保证长度
                        //System.out.println(res);
                        return 1;
                }
                int cnt = 0;
                for ( char c : source.toCharArray() ) {
                        if ( res.contains( c+"" ) ) {                        //保证不重复
                                continue;
                        }
                        if ( "".equals(res) && c == '4' ) {                //4不能开头
                                continue;
                        }
                        if ( (res.endsWith("3") && c=='1') || (res.endsWith("1") && c=='3') ) { //1,3不在一起
                                continue;
                        }
                        cnt += fun02(res+c, source);
                }
                return cnt;
        }
}

作者: 小超超    时间: 2016-8-28 12:04
好赞顶,支持。。。




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