标题:六角填数

如图所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。

这个题可以使用全排列来做,就是将剩下的数全部放到一个向量中,然后使用STL模板库中的全排列来暴力破解

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void check(vector<int> vec);
int main()
{
	vector <int> vec;
	vec.push_back(2);     //将剩下的数全部放到一个向量中
	for(int i = 4 ; i <= 7 ; ++i)
		vec.push_back(i);
	for(int i = 9 ; i <= 12 ; ++i)
		vec.push_back(i);
	
	do{
		check(vec);      //开始检查
	}while(next_permutation(vec.begin(),vec.end())); //向量中的元素全排列
	
	return 0;
 } 
 
 void check(vector <int> vec)
 {
 	int r1 = 1+vec[0]+vec[3]+vec[5];  //计算每条线上的数据
 	int r2 = 1+vec[1]+vec[4]+vec[8];
 	int r3 = 8+vec[0]+vec[1]+vec[2];
 	int r4 = 8+vec[3]+vec[6]+3;
 	int r5 = vec[2]+vec[4]+vec[7]+3;
 	int r6 = vec[5]+vec[6]+vec[7]+vec[8];
 	                          
 	if(r1 == r2 && r2 == r3 && r3 == r4 && r4 == r5 && r5 == r6)
 		cout<<vec[3]<<endl;
 }
立志成为一名攻城狮
最后更新于 2020-03-11