问题
有如下的 10 个圆圈,将 0到9 这 10 个数字填入圆中。要求每个正方形上的 4 个圆中的数的和相等。
例如:
这就是一种合法的方案。
那么,请你计算出一共有多少种合法的填数方案。
答案
5376
思路
此题可以用全排列来做,每一种排列填入圆形里,然后依次判断每个正方形上的 4 个圆中的数的和相等,那十个圆可以用一个二维数组存储。
实现代码
#include <iostream>
using namespace std;
int main() {
int v[10]={0,1,2,3,4,5,6,7,8,9};
int x[2][5];
memset(x, 0, sizeof(x));
int pp=0;
do {
int u=0;
for (int i=0;i<2;i++) {
for (int j=0;j<5;j++) {
x[i][j]=v[u];
u++;
}
}
int m1=x[0][0]+x[0][1]+x[1][0]+x[1][1];
int m2=x[0][1]+x[0][2]+x[1][1]+x[1][2];
int m3=x[0][2]+x[0][3]+x[1][2]+x[1][3];
int m4=x[0][3]+x[0][4]+x[1][3]+x[1][4];
if (m1==m2&&m1==m3&&m1==m4&&m2==m3&&m2==m4&&m3==m4) {
pp++;
}
} while (next_permutation(v,v+10));
printf("%d",pp);
return 0;
}