随意组合(java)

1.设计题目

小明被绑架到X星球的巫师W那里。当时,W正在玩弄两组数据 (2 3 5 8) 和 (1 4 6 7),他命令小明从一组数据中分别取数与另一组中的数配对,共配成4对 (组中的每个数必被用到)。

小明的配法是:{(8,7),(5,6),(3,4),(2,1)}

巫师凝视片刻,突然说这个配法太棒了!

因为:

每个配对中的数字组成两位数,求平方和,无论正倒,居然相等:

87^2 + 56^2 + 34^2 + 21^2 = 12302

78^2 + 65^2 + 43^2 + 12^2 = 12302

小明想了想说:“这有什么奇怪呢,我们地球人都知道,随便配配也可以啊!”

{(8,6),(5,4),(3,1),(2,7)}

86^2 + 54^2 + 31^2 + 27^2 = 12002

68^2 + 45^2 + 13^2 + 72^2 = 12002

巫师顿时凌乱了。。。。。

请你计算一下,包括上边给出的两种配法,巫师的两组数据一共有多少种配对方案具有该特征。

配对方案计数时,不考虑配对的出现次序。

就是说:{(8,7),(5,6),(3,4),(2,1)}与{(5,6),(8,7),(3,4),(2,1)}是同一种方案。

2.问题描述

将两个数组中任意数据两两组合且不可以重复,组合后的四对数,他们的正序平方和与倒序平方和相等,求符合条件上诉条件的组合数量。

3.问题分析

在两组数组中,将数组{1,4,6,7}排列组合,与另一组数组{2,3,5,8}两两组合,且为不相同的四对数,然后计算四对数的正序与逆序的平方和,是否相等,将符合条件的组合计数,输出答案。

4.代码实现

public class Design_01随意组合 {
    static int[] arr1 = {2,3,5,8};     //指定其中一组数组为原本其中任意一组的数据;
    static int[][] arr2 = {
            {1,4,6,7},{1,4,7,6},{1,6,4,7},{1,6,7,4},{1,7,4,6},{1,7,6,4},
            {4,1,6,7},{4,1,7,6},{4,6,1,7},{4,6,7,1},{4,7,1,6},{4,7,6,1},
            {6,1,4,7},{6,1,7,4},{6,4,1,7},{6,4,7,1},{6,7,1,4},{6,7,4,1},
            {7,1,4,6},{7,1,6,4},{7,4,1,6},{7,4,6,1},{7,6,1,4},{7,6,4,1}
    };     //指定另外一组数组为另外一组数据的全排列;
    public static void main(String[] args){
        int s = 0,sum1 = 0,sum2 = 0;     //s变量用来记录符合要求的组合数;
        int arr3[] = new int[4];
        int arr4[] = new int[4];
        for(int i = 0;i<= arr2.length-1;i++){
            for(int j = 0;j<= arr1.length-1;j++){
                arr3[j] = arr1[j]*10 + arr2[i][j];
                arr4[j] = arr1[j] + arr2[i][j]*10;
                sum1 += arr3[j]*arr3[j];
                sum2 += arr4[j]*arr4[j];
            }
            if(sum1 == sum2) {
                s++;
                //System.out.print("//这是第"+s+"种组合,这组组合为:"+arr3[0]+" * "+arr3[0]+" + "+ arr3[1]+" * "+arr3[1]+" + "+
                        //arr3[2]+" * "+arr3[2]+" + "+ arr3[3]+" * "+arr3[3]+"="+sum1+"     ");
                //System.out.println(arr4[0]+" * "+arr4[0]+" + "+ arr4[1]+" * "+arr4[1]+" + "+
                        //arr4[2]+" * "+arr4[2]+" + "+ arr4[3]+" * "+arr4[3]+"="+sum2);
                //System.out.println("//这是第"+s+"种组合,这种组合的和为"+sum1);
            }
            sum1 = 0;
            sum2 = 0;
        }
        System.out.println("总共有"+s+"种组合");
    }
}

5.运行结果:

这是第1种组合,这组组合为:21 * 21 + 34 * 34 + 56 * 56 + 87 * 87=12302     12 * 12 + 43 * 43 + 65 * 65 + 78 * 78=12302
这是第1种组合,这种组合的和为12302
这是第2种组合,这组组合为:21 * 21 + 34 * 34 + 57 * 57 + 86 * 86=12242     12 * 12 + 43 * 43 + 75 * 75 + 68 * 68=12242
这是第2种组合,这种组合的和为12242
这是第3种组合,这组组合为:21 * 21 + 36 * 36 + 54 * 54 + 87 * 87=12222     12 * 12 + 63 * 63 + 45 * 45 + 78 * 78=12222
这是第3种组合,这种组合的和为12222
这是第4种组合,这组组合为:21 * 21 + 36 * 36 + 57 * 57 + 84 * 84=12042     12 * 12 + 63 * 63 + 75 * 75 + 48 * 48=12042
这是第4种组合,这种组合的和为12042
这是第5种组合,这组组合为:21 * 21 + 37 * 37 + 54 * 54 + 86 * 86=12122     12 * 12 + 73 * 73 + 45 * 45 + 68 * 68=12122
这是第5种组合,这种组合的和为12122
这是第6种组合,这组组合为:21 * 21 + 37 * 37 + 56 * 56 + 84 * 84=12002     12 * 12 + 73 * 73 + 65 * 65 + 48 * 48=12002
这是第6种组合,这种组合的和为12002
这是第7种组合,这组组合为:24 * 24 + 31 * 31 + 56 * 56 + 87 * 87=12242     42 * 42 + 13 * 13 + 65 * 65 + 78 * 78=12242
这是第7种组合,这种组合的和为12242
这是第8种组合,这组组合为:24 * 24 + 31 * 31 + 57 * 57 + 86 * 86=12182     42 * 42 + 13 * 13 + 75 * 75 + 68 * 68=12182
这是第8种组合,这种组合的和为12182
这是第9种组合,这组组合为:24 * 24 + 36 * 36 + 51 * 51 + 87 * 87=12042     42 * 42 + 63 * 63 + 15 * 15 + 78 * 78=12042
这是第9种组合,这种组合的和为12042
这是第10种组合,这组组合为:24 * 24 + 36 * 36 + 57 * 57 + 81 * 81=11682     42 * 42 + 63 * 63 + 75 * 75 + 18 * 18=11682
这是第10种组合,这种组合的和为11682
这是第11种组合,这组组合为:24 * 24 + 37 * 37 + 51 * 51 + 86 * 86=11942     42 * 42 + 73 * 73 + 15 * 15 + 68 * 68=11942
这是第11种组合,这种组合的和为11942
这是第12种组合,这组组合为:24 * 24 + 37 * 37 + 56 * 56 + 81 * 81=11642     42 * 42 + 73 * 73 + 65 * 65 + 18 * 18=11642
这是第12种组合,这种组合的和为11642
这是第13种组合,这组组合为:26 * 26 + 31 * 31 + 54 * 54 + 87 * 87=12122     62 * 62 + 13 * 13 + 45 * 45 + 78 * 78=12122
这是第13种组合,这种组合的和为12122
这是第14种组合,这组组合为:26 * 26 + 31 * 31 + 57 * 57 + 84 * 84=11942     62 * 62 + 13 * 13 + 75 * 75 + 48 * 48=11942
这是第14种组合,这种组合的和为11942
这是第15种组合,这组组合为:26 * 26 + 34 * 34 + 51 * 51 + 87 * 87=12002     62 * 62 + 43 * 43 + 15 * 15 + 78 * 78=12002
这是第15种组合,这种组合的和为12002
这是第16种组合,这组组合为:26 * 26 + 34 * 34 + 57 * 57 + 81 * 81=11642     62 * 62 + 43 * 43 + 75 * 75 + 18 * 18=11642
这是第16种组合,这种组合的和为11642
这是第17种组合,这组组合为:26 * 26 + 37 * 37 + 51 * 51 + 84 * 84=11702     62 * 62 + 73 * 73 + 15 * 15 + 48 * 48=11702
这是第17种组合,这种组合的和为11702
这是第18种组合,这组组合为:26 * 26 + 37 * 37 + 54 * 54 + 81 * 81=11522     62 * 62 + 73 * 73 + 45 * 45 + 18 * 18=11522
这是第18种组合,这种组合的和为11522
这是第19种组合,这组组合为:27 * 27 + 31 * 31 + 54 * 54 + 86 * 86=12002     72 * 72 + 13 * 13 + 45 * 45 + 68 * 68=12002
这是第19种组合,这种组合的和为12002
这是第20种组合,这组组合为:27 * 27 + 31 * 31 + 56 * 56 + 84 * 84=11882     72 * 72 + 13 * 13 + 65 * 65 + 48 * 48=11882
这是第20种组合,这种组合的和为11882
这是第21种组合,这组组合为:27 * 27 + 34 * 34 + 51 * 51 + 86 * 86=11882     72 * 72 + 43 * 43 + 15 * 15 + 68 * 68=11882
这是第21种组合,这种组合的和为11882
这是第22种组合,这组组合为:27 * 27 + 34 * 34 + 56 * 56 + 81 * 81=11582     72 * 72 + 43 * 43 + 65 * 65 + 18 * 18=11582
这是第22种组合,这种组合的和为11582
这是第23种组合,这组组合为:27 * 27 + 36 * 36 + 51 * 51 + 84 * 84=11682     72 * 72 + 63 * 63 + 15 * 15 + 48 * 48=11682
这是第23种组合,这种组合的和为11682
这是第24种组合,这组组合为:27 * 27 + 36 * 36 + 54 * 54 + 81 * 81=11502     72 * 72 + 63 * 63 + 45 * 45 + 18 * 18=11502
这是第24种组合,这种组合的和为11502
总共有24种组合

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值