题目描述
题目来源:2016年蓝桥杯国赛
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示。在七角星的 14 个节点上填入 1 ~ 14的数字,不重复,不遗漏。 要求每条直线上的四个数字之和必须相等。
图中已经给出了 333 个数字。 请计算其它位置要填充的数字,答案唯一。
填好后,请输出绿色节点的 444 个数字(从左到右,用空格分开)。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
思路:1. 使用一个数组a来存放需要填入的11个元素,从小到大存放;
2. 使用c++中全排next_permutation()的方式进行模拟,有11!中情况,由于情况较多,所以会超时,只能在本机运行(大概2-3min),本题为填空题,时间可以接受;
3. 将数组下标填入图中,随意填不重复即可;
4. 分别计算图中七条线上的元素之和,若七条线上的和相互都相等则满足题目要求;
5. 输出绿色部分的元素值,即a[0]、a[1]、a[2]、a[3];
//2016g 七星填数
#include <iostream> //vxgzh:xtsn
using namespace std;
#include <algorithm>
#include <set>
bool abc(int *a) //用来判断是否满足题目要求
{
int sum;
set <int> s;
sum=a[0]+a[1]+a[2]+a[3]; s.insert(sum);
sum=a[3]+a[4]+a[5]+a[6];s.insert(sum);
sum=a[6]+a[7]+a[8]+14;s.insert(sum);
sum=14+a[10]+a[1]+6;s.insert(sum);
sum=6+a[2]+a[4]+11;s.insert(sum);
sum=11+a[5]+a[7]+a[9];s.insert(sum);
sum=a[9]+a[8]+a[10]+a[0];s.insert(sum);
if(s.size()==1)
return true;
else
return false;
}
int main()
{
int i,a[11]={1,2,3,4,5,7,8,9,10,12,13}; //初始化其余元素
do
{
if(abc(a))
break;
}while(next_permutation(a,a+11)); //全排列模拟所有情况
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
return 0;
}