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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 爱吃柠檬 中级黑马   /  2016-8-24 23:01  /  1655 人查看  /  32 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已知有1,2,3,4四个数字,求他们组合的形式有多少种?
要求:不能有重复的数。
需求1:
        组合方式有多少种?  
需求2:
        如果在上个需求上改进下:  4不能开头,1和3不能挨着,有多少种情况?
        {:2_31:}

32 个回复

倒序浏览
你确定不是数学题?
回复 使用道具 举报
一:24
二:10
为什么总扎堆问问题?
回复 使用道具 举报
li--yong 发表于 2016-8-24 23:06
你确定不是数学题?

把数学题代码化
回复 使用道具 举报
水月灬清影 发表于 2016-8-24 23:09
一:24
二:10
为什么总扎堆问问题?

代码化
回复 使用道具 举报
高中的排列组合
回复 使用道具 举报
这么水帖不好吧!
回复 使用道具 举报
1.24  2。10
回复 使用道具 举报
原理是排列组合
回复 使用道具 举报
排序就可以
回复 使用道具 举报
好像这个是最笨的做法……再想想

[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));
//							}
						}
					}
				}
			}
		}
	}
}
回复 使用道具 举报
楼上威武
回复 使用道具 举报
11楼 - -!膜拜
回复 使用道具 举报
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);
回复 使用道具 举报 1 0
        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 17:47
好像这个是最笨的做法……再想想

[mw_shl_code=java,true]public class Practice {

定义count的意义是什么?
回复 使用道具 举报
惊鸿游龙 发表于 2016-8-25 20:18
定义count的意义是什么?

题目不是要求解多少种组合吗……难道打印出来了一个一个数?
回复 使用道具 举报
最简单的数学题.上过高中就会了
回复 使用道具 举报
[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);

	}

回复 使用道具 举报
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问只需要在集合结果中遍历,踢掉不符合要求的元素即可
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马