题目
六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
解析
本题难点:知道要用全排列,但是没有想到合适的数据结构存放数据
本题思路:如何想到用全排列?本题有9个空位让9个不同的数来占位置,用循环就要用九重循环大大降低性能
这里用链表的也是不可以的,链表方便添加与删除,但访问极不方便
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void check(vector<int> data){
int r1 = 8+data[0]+data[1]+data[2];
int r2 = data[2]+data[3]+data[4]+3;
int r3 = 11+data[5]+data[6];
int r4 = 1+data[1]+data[3]+data[7];
int r5 = data[4]+data[5]+data[7]+data[8];
int r6 = 1+data[8]+data[6]+data[0];
if(r1==r2&&r2==r3&&r3==r4&&r4==r5&&r5==r6){
printf("%d %d %d %d %d %d %d %d %d\n",data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8]);
printf("*位是:%d",data[6]);
}
}
int main(){
vector<int> data;
for(int i=4;i<8;i++){
data.push_back(i);
}
for(int i=9;i<13;i++){
data.push_back(i);
}
data.push_back(2);
do{
check(data);
}while(next_permutation(data.begin(),data.end()));
return 0;
}