下图中,每个方块代表 1…13 中的某一个数字,但不重复。
例如:
1×2+9×7=13×5
10×8+12×3=11×4
只要有任意一个方块代表的数字不同,就算两种不同的方案。
请你计算,一共有多少种不同的方案。
思路 开始用全排列做的,但是跑不出来,要运行很长时间,改成全排列了
#include<iostream>
#include<algorithm>
using namespace std;
int check(int k,int num[])
{
for(int i = 1; i < k; i++)
{
if(num[i] == num[k])
{
return 0;
}
}
//多设定条件,运行速度会快很多
if(k == 6)
{
if(num[1]*num[2]+num[3]*num[4]!=num[5]*num[6])
{
return 0;
}
}
if(k == 12)
{
if(num[7]*num[8]-num[9]*num[10]!=num[11]*num[12])
{
return 0;
}
}
return 1;
}
int main()
{
int num[13]={0};
int k = 1;
int cnt = 0;
while(k>=1)
{
num[k]++;
while(num[k]<=13&&!check(k,num))
{
num[k]++;
}
if(num[k]<=13&&k<=12)
{
if(k==12)
{
cnt++;
}
else
{
k++;
}
}
else
{
num[k] = 0;
k--;
}
}
cout << cnt;
return 0;
}