藍橋杯 題目:隨意組合

隨意組合
小明被綁架到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;

} 
有問題歡迎留言。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章