蓝桥杯--五星填数

/*思路: 把这十个数看成一个数独,在纸上自己画出有哪几个点加到了一块,然后依次遍历,总共有120种可能

但是,每个都有对应的旋转,就是除以5,,还得有个镜像所以 /10

*/

#include<bits/stdc++.h>
int a[10] = {0};
int b[13] = {0};
int s = 0;
int f(int n)
{
    int i;
    int c,d,e,f1,g;
    if(n == 10)
    {
        c = a[0] + a[2] + a[5] + a[8];
        d = a[0] + a[3] + a[6] + a[9];
        e = a[1] + a[2] + a[3] + a[4];
        f1 = a[1] + a[5] + a[7] + a[9];
        g = a[8] + a[7] + a[6] + a[4];
        if(c == d && d == e && e == f1 && f1 == g) 
        s++;
    }
    else
    for(i = 1; i <= 12; i++)
    {
        if(i == 7 || i == 11)continue;
        if(b[i] == 0)
        {
            b[i] = 1;
            a[n] = i;
            f(n+1);
            b[i] = 0;
        }
    } 
}

int main()
{
    f(0);
    printf("%d",s / 10);
}

猜你喜欢

转载自blog.csdn.net/weixin_42295018/article/details/88327108