题目
输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得正方体三组相对的面上的4个顶点的和都相等。
思路
代码
#include <iostream>
using namespace std;
// 判断条件
// 下标0-7分别对应正方体编号1-8的顶点
bool checking(int data[8])
{
bool ok = false;
if (data[0] + data[1] + data[2] + data[3] == data[4] + data[5] + data[6] + data[7] &&
data[0] + data[2] + data[4] + data[6] == data[1] + data[3] + data[5] + data[7] &&
data[0] + data[1] + data[4] + data[5] == data[2] + data[3] + data[6] + data[7])
ok = true;
return ok;
}
// 全排列
void Permutation(int data[],int position = 0, int len = 8)
{
if (position == len - 1 && checking(data))
{
for (int i = 0; i < len; ++i)
{
cout << data[i] << ' ';
}
cout << endl;
// 找到一种解,就退出了
exit(EXIT_SUCCESS);
}
for (int i = position; i < len; ++i)
{
std::swap(data[position], data[i]);
Permutation(data, position + 1);
std::swap(data[position], data[i]);
}
}
int main()
{
int data[8] = {0,1,2,3,4,5,6,7};
Permutation(data);
return EXIT_SUCCESS;
}