蓝桥杯——六角填数为什么用vector实现(C++实现)

题目

六角填数

如图【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;
} 

猜你喜欢

转载自blog.csdn.net/weixin_44078014/article/details/107932311