• [蓝桥杯2016决赛]随意组合


     

      题目描述

    小明被绑架到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)}是同一种方案。

    输出

    输出一个整数表示答案 
     

    题解:

    先实现配对:对一组数据进行全排列,按顺序和另一组数据匹配,实现所有的配对

    在验证正反顺序的平方和是否相等

    #include<iostream>
    #include<queue>
    #include<algorithm>
    #include<set>
    using namespace std;
    int main()
    {
        int a[4]={2,3,5,8};
        int b[4]={1,4,6,7};
        int x,y,ans=0;
        do
        {
            int a1=a[0]*10+b[0],b1=b[0]*10+a[0];
            int a2=a[1]*10+b[1],b2=b[1]*10+a[1];
            int a3=a[2]*10+b[2],b3=b[2]*10+a[2];
            int a4=a[3]*10+b[3],b4=b[3]*10+a[3];
            x=a1*a1+a2*a2+a3*a3+a4*a4;
            y=b1*b1+b2*b2+b3*b3+b4*b4;
            if(x==y)
                ans++;
        }while(next_permutation(a,a+4));
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    Arcgis Android 常见问题
    Arcgis Android 手动搭建开发环境
    Arcgis Android 坐标转换
    ArcGis Android 10.2.6更新文档翻译
    arcgis android 中shapefile的加载
    arcgis android 10.2.5开发环境配置
    so far so good
    做什么都要坚持,写blog也一样,
    WPF前台数据验证(红框)Validation.ErrorTemplate 附加属性
    WOSA/XFS及SP综述
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12316492.html
Copyright © 2020-2023  润新知