小明被綁架到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)}
是同一種方案。
注意:需要提交的是一個整數,不要填寫任何多餘內容(比如,解釋說明文字等)
分析:假設數組a={2,3,5,8},a的第一個元素有4種選擇,第二個元素有3種,第三個有2種,最後一個選剩下的,然後判斷是不是滿足條件。
C++代碼:
#include<iostream>
using namespace std;
int main()
{
int a[]={2,3,5,8};
int b[]={1,4,6,7};
int t=0,index;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)continue;
for(int k=0;k<4;k++)
{
if(k==j||k==i)continue;
for(int m=0;m<4;m++)
if(m!=i&&m!=j&&m!=k)
{
index=m;break;
}
if(((a[0]*10+b[i])*(a[0]*10+b[i])+(a[1]*10+b[j])*(a[1]*10+b[j])+
(a[2]*10+b[k])*(a[2]*10+b[k])+(a[3]*10+b[index])*(a[3]*10+b[index]))
==((b[i]*10+a[0])*(b[i]*10+a[0])+(b[j]*10+a[1])*(b[j]*10+a[1])+
(b[k]*10+a[2])*(b[k]*10+a[2])+(b[index]*10+a[3])*(b[index]*10+a[3])))
{t++;
cout<<a[0]<<','<<b[i]<<' '<<a[1]<<','<<b[j]<<' '<<a[2]<<','<<b[k]<<" "<<a[3]<<','<<b[index]<<endl;
}
}
}
}
cout<<t<<endl;
}
有問題歡迎留言。