题目描述
如图所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
在这里插入图片描述
请通过浏览器提交答案,不要填写多余的内容。
答案: 10
话说吧
我吐了,执行代码了两个多小时,按道理是能出答案!!!!但是还没出答案
下面是我那异常暴力的错误代码
先放这里,有时间更正!!!
#include<stdio.h>
int heng_1[20];
int heng_2[20];
int left_xie_1[20];
int left_xie_2[20];
int right_xie_1[20];
int right_xie_2[20];
int main()
{ //目标是求 left_xie_1[2]!!!
for(int q=0; q<=3; q++)
for(int w=1; w<=12; w++)
{
heng_1[q] = w;
printf("q:%d w:%d\n", q, w);
for(int e=0; e<=3; e++)
for(int r=1; r<=12; r++)
{
heng_2[e] = r;
for(int t=0; t<=3; t++)
for(int y=1; y<=12; y++)
{
left_xie_1[t] = y;
for(int u=0; u<=3; u++)
for(int i=1; i<=12; i++)
{
left_xie_2[u] = i;
for(int o=0; o<=3; o++)
for(int p=1; p<=12; p++)
{
right_xie_1[o] = p;
for(int a=0; a<=3; a++)
for(int s=1; s<=12; s++)
{
right_xie_2[a] = s;
heng_1[0] = left_xie_1[0] = 8;
left_xie_2[0] = right_xie_1[0] = 1;
left_xie_1[3] = right_xie_2[3] = 3;
int x = heng_1[0]+heng_1[1]+heng_1[2]+heng_1[3];
int c = heng_2[0]+heng_2[1]+heng_2[2]+heng_2[3];
int v = left_xie_1[0]+left_xie_1[1]+left_xie_1[2]+left_xie_1[3];
int b = left_xie_2[0]+left_xie_2[1]+left_xie_2[2]+left_xie_2[3];
int n = right_xie_1[0]+right_xie_1[1]+right_xie_1[2]+right_xie_1[3];
int m = right_xie_2[0]+right_xie_2[1]+right_xie_2[2]+right_xie_2[3];
printf("x=%d c=%d v=%d b=%d n=%d m=%d\n", x, c, v, b, n, m);
if(x == c && x == v && x == b && x ==n && x == m)
if(c == v && c == b && c ==n && c == m)
if(v == b && v ==n && v == m)
if(b ==n && b == m)
if(m == n)
{
printf("%d", left_xie_1[2]);
printf("!!!");
return 0;
}
}
}
}
}
}
}
return 0;
}
下面是其他人的正解:
1.C++
可以用到全排列:
#include < algorithm>的next_permutation(start,end)
特别方便,但C没有这个
#include <bits/stdc++.h>
using namespace std;
void check(vector<int> num)
{
//取六角形的六条边
int r1 = 8 + num[0] + num[1] + num[2];
int r2 = 8 + num[3] + num[6] + 3;
int r3 = 3 + num[7] + num[4] + num[2];
int r4 = 1 + num[0] + num[3] + num[5];
int r5 = 1 + num[1] + num[4] + num[8];
int r6 = num[5] + num[6] + num[7] + num[8];
//如果每条边相等 输出其余的九个点
if(r1 == r2 && r2 == r3 && r3 == r4 && r4 == r5 && r5 == r6)
{
for(int i = 0; i < num.size(); i++) cout << num[i] << ' ';
cout << endl;
}
}
int main()
{
int a[] = {2,4,5,6,7,9,10,11,12};
vector<int> num(a, a+9);
do
{
//判断每种情况
check(num);
}while(next_permutation(num.begin(), num.end()));
return 0;
}
2.C
跟我错的挺像的,但是人家比我聪明 T-T
#include <stdio.h>
int main()
{
int a,b,c,d,e,f,g,h,i;
int x,y,z,u,v,w;
for(a=2;a<=12;a++)
{
if(a==3||a==8)continue;
for(b=2;b<=12;b++)
{
if(b==3||b==8||b==a)continue;
for(c=2;c<=12;c++)
{
if(c==3||c==8||c==b||c==a)continue;
for(d=2;d<=12;d++)
{
if(d==3||d==8||d==c||d==b||d==a)continue;
for(e=2;e<=12;e++)
{
if(e==3||e==8||e==d||e==d||e==c||e==b||e==a)continue;
for(f=2;f<=12;f++)
{
if(f==3||f==8||f==a||f==b||f==c||f==d||f==e)continue;
for(g=2;g<=12;g++)
{
if(g==3||g==8||g==a||g==b||g==c||g==d||g==e||g==f)continue;
for(h=2;h<=12;h++)
{
if(h==3||h==8||h==a||h==b||h==c||h==d||h==e||h==f||h==g)continue;
for(i=2;i<=12;i++)
{
if(i==3||i==8||i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h)continue;
x=1+a+d+f;
y=8+a+b+c;
z=1+b+e+i;
u=c+e+h+3;
v=f+g+h+i;
w=8+d+g+3;
if(x==y&&x==z&&x==u&&x==v&&x==w)
{
printf(" 1\n");
printf("8 %d %d %d\n",a,b,c);
printf(" %d\t%d\n",d,e);
printf("%d %d %d %d\n",f,g,h,i);
printf(" 3\n\n");
}
}
}
}
}
}
}
}
}
}
}