蓝桥杯题——方格填数

  T T T

T T T T

T T T

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)


一共有多少种可能的填数方案?

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

我的思路是

1:先把这10个数进行排列,然后把排列后的数字存入一个二维数组b[3][4]中;

2:用int c[8][2] = {1,1,1,-1,-1,-1,-1,1,0,1,1,0,-1,0,0,-1};来判断是否满足题目条件

3,把满足的输出来。

#include <iostream>
#include <string>
#include <math.h>
using namespace std;

int a[10] = {0,1,2,3,4,5,6,7,8,9};
int sum = 0;

int b[3][4];


void F()//输出每一种情况
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            cout<<b[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    cout<<endl;
}


void Add()
{
    int c[8][2] = {1,1,1,-1,-1,-1,-1,1,0,1,1,0,-1,0,0,-1};//上下左右加四个斜角,共八个方向
    int x;
    int y;
    int nn = 1;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            for(int k=0;k<8;k++)
            {
                x = i+c[k][0];
                y = j+c[k][1];
                if(x<0||x>=3||y<0||y>=4)
                {
                    continue;
                }
                if(abs(b[i][j] - b[x][y])==1 )
                {
                    nn = 0;
                    break;
                }
            }
            if(nn == 0)
            {
                break;
            }
        }
        if(nn == 0)
        {
            break;
        }
        
    }
    if(nn == 1)
    {
        sum++;
    //    F();//输出每一种情况
    }
}

void fun(int m,int n)//组合,保存到数组中
{
    if(m == 0)
    {
        b[0][1] = a[0];
        b[0][2] = a[1];
        b[0][3] = a[2];
        b[1][0] = a[3];
        b[1][1] = a[4];
        b[1][2] = a[5];
        b[1][3] = a[6];
        b[2][0] = a[7];
        b[2][1] = a[8];
        b[2][2] = a[9];
        Add();
    }
    else
    {
        int t;
        for(int i=0;i<=m;i++)
        {
            t = a[i];
            a[i] = a[m];
            a[m] = t;
            fun(m-1,n);
            t = a[i];
            a[i] = a[m];
            a[m] = t;
        }
    }
}

int main()
{
    memset(b,0,sizeof(b));
    b[0][0] = 20;
    b[2][3] = 20;
    fun(9,10);
    cout<<sum<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zkw123/p/10533058.html