蓝桥杯-随意组合

xiaoxiao2021-02-28  2

随意组合

小明被绑架到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<cmath> #include<cstring> using namespace std; int a[]={2,3,5,8}; int b[]={1,4,6,7}; int q[4],ans=0; int judge2() { int x1,x2,x3,x4,y1,y2,y3,y4; x1=pow(a[0]*10+b[q[0]],2); x2=pow(a[1]*10+b[q[1]],2); x3=pow(a[2]*10+b[q[2]],2); x4=pow(a[3]*10+b[q[3]],2); y1=pow(a[0]+b[q[0]]*10,2); y2=pow(a[1]+b[q[1]]*10,2); y3=pow(a[2]+b[q[2]]*10,2); y4=pow(a[3]+b[q[3]]*10,2); if((x1+x2+x3+x4)==(y1+y2+y3+y4)) ans++; } int judge1(int n) { for(int i=0;i<n;i++) if(q[i]==q[n]) return 0; return 1; } void dfs(int n) { for(int i=0;i<4;i++) { q[n]=i; if(judge1(n)) { if(n==3) judge2(); else dfs(n+1); } } } int main() { dfs(0); cout<<ans; }

转载请注明原文地址: https://www.6miu.com/read-1400390.html

最新回复(0)