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