请问数字0~7最多能组成多少组,注意不能重复,比如0,1和1,0只能算1组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问数字0~7最多能组成多少组,注意不能重复,比如0,1和1,0只能算1组?相关的知识,希望对你有一定的参考价值。

比如数字0,1,2有0,1,2,01,02,12,012共7种组合。

解:0一7共8个数,如果是组合,不包括8选1,则有8选2,8选3,8选4,8选5,8选6,8选7和8选8七种组合,不过8选2与8选6,8选3与8选5,8选7与8选1计算方法相同,而8选8只一种组合形式,所以有:
8x7/(1x2)x2+8x7x6/(1x2ⅹ3)ⅹ2+8x7ⅹ6x5/(1ⅹ2x3ⅹ4)+8+1
=56+112+70+8+1
=247
共有7种形式247种组合。
参考技术A 你好。数字0~7 不重复可以这样编组。
01,02,03,04,05,06,07,12,13,14,15,16,17,23,24,25,26,27,34,35,36,37,45,46,47,56,57,67
一共能组成28组。

蓝桥 凑平方数

技术图片
/*

凑平方数

把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。
比如:0, 36, 5948721

再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等...

注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。

如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?

注意:需要提交的是一个整数,不要填写多余内容。





*/
题目

题解 :完全排列+DFS+Set(查重)

 

技术图片
import java.util.*;

public class Main{
    static int[] num = {0,1,2,3,4,5,6,7,8,9};
    static long[] record = new long[15];
    static Set<String> set = new HashSet<String>();
    
    static boolean judge(long number) {
        if(Math.sqrt(number)==(long)Math.sqrt(number)) return true;
        else return false;
    }
    
    static String getString(int cnt) {
        long[] temp = new long[15];
        for(int i=0;i<cnt;i++)
            temp[i] = record[i];
        Arrays.sort(temp, 0,cnt);
        String string = "";
        for(int i=0;i<cnt;i++) {
            string += temp[i];
            string += ",";
        }
        return string;
    }
    
    static void dfs(int index,int cnt) {
        if(index==10) {
//            if(!set.contains(getString(cnt))) 
//                System.out.println(getString(cnt));    
            set.add(getString(cnt));
            return;
        }
        if(num[index]==0) {
            record[cnt] = 0;
            dfs(index+1, cnt+1);
            return;
        }
        long number = 0;
        for(int i=index;i<10;i++) {
            number = number*10+num[i];
            if(judge(number)) {
                record[cnt] = number;
                dfs(i+1, cnt+1);
            }
        }
    }
    
    static void permutation(int step) {
        if(step==10) {
            dfs(0,0);
            return;
        }
        for(int i=step;i<10;i++) {
            int temp = num[step]; num[step] = num[i]; num[i] = temp;
            permutation(step+1);
            temp = num[step]; num[step] = num[i]; num[i] = temp;
        }
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        permutation(0);
        System.out.println(set.size());
    }
    
}
View Code

 

技术图片
import java.util.*;

public class Main{
    static int[] num = {0,1,2,3,4,5,6,7,8,9};
    static Set<String> set = new HashSet<String>();
    static List<Long> list;
    
    static boolean judge(long number) {
        if(Math.sqrt(number)==(long)Math.sqrt(number)) return true;
        else return false;
    } 
    
    static String getString() {
        Set<Long> treeSet = new TreeSet<Long>();
        for(Long e:list)
            treeSet.add(e);
        String string = "";
        for(Long e:treeSet) {
            string += e;
            string += ",";
        }
        return string;
    } 
    static void dfs(int step) {
        if(step==10) {
//            if(!set.contains(getString())) {
//                for(int i=0;i<10;i++)
//                    System.out.print(num[i]+" ");
//                System.out.println();
//                System.out.println(getString());
//                System.out.println();
//            
//            }
            set.add(getString());
            return;
        }
        if(num[step]==0) {
            list.add((long) num[step]);
            dfs(step+1);
            list.remove(list.size()-1);
            return;
        }
        long number = 0; 
        for(int i=step;i<10;i++) {
            number = number*10 + num[i];
            if(judge(number)) {
                list.add(number);
                dfs(i+1);
                list.remove(list.size()-1);
            }
        }
    }
    static void permutation(int step) {
        if(step==10) {
            list = new ArrayList<Long>();
            dfs(0);
            return;
        }
        for(int i=step;i<10;i++) {
            int temp = num[step]; num[step] = num[i]; num[i] = temp;
            permutation(step+1);
            temp = num[step]; num[step] = num[i]; num[i] = temp;
        }
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        permutation(0);
        System.out.println(set.size());
    }
}
View Code

 

以上是关于请问数字0~7最多能组成多少组,注意不能重复,比如0,1和1,0只能算1组?的主要内容,如果未能解决你的问题,请参考以下文章

用0~7可以组成多少个没有重复数字,且能被

1234567890组成的六位数有多少个分别是多少

蓝桥 凑平方数

凑平方数

0-9组成四位数的一共有多少组

JAVA用1、2、2、3、4、5排列组合,最多能排列多少组合并打印出来。要求:4不能放在第三位,4和5不能相连