题目:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体8个顶点,使得正方体上三组相对的面上的4个顶点的和相等。
代码示例:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
void swap(int &c1,int &c2)
{
int temp = c1;
c1 = c2;
c2 = temp;
}
void PrintAllKinds(int a[], int from, int to)
{
if (a == NULL)
return;
if (from == to)
{
if (
(a[0] + a[1] + a[2] + a[3] == a[4] + a[5] + a[6] + a[7])
&& (a[0] + a[2] + a[4] + a[6] == a[1] + a[3] + a[5] + a[7])
&& (a[0] + a[1] + a[4] + a[5] == a[2] + a[3] + a[6] + a[7])
)
{
for (int i = 0; i <= to; i++)
cout << a[i];
cout << endl;
}
}
else
{
for (int i = from; i <= to; i++)
{
swap(a[from], a[i]);
PrintAllKinds(a, from + 1, to);
swap(a[from], a[i]);
}
}
}
int main()
{
int const n = 8;
int a[n] = { 1,4,6,3,6,4,3,1};
int from = 0;
int to = n-1;
PrintAllKinds(a, from, to);
}