标题:六角填数
如图所示六角形中,填入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; }
Comments NOTHING