第七届蓝桥杯省赛 方格填数

在这里插入图片描述

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能填写的方案?
请填写表示方案数目的整数~

分析:从左到右从上到下标为09,将a[10]中的数字依次填入,所以只要将a数组从0123456789一直全排列试到9876543210,测试每一个结果是否满足,满足条件的次数累加得到的就是方案数目~答案是1580
#include <iostream>
#include <algorithm>

using namespace std;

int a[10]={0,1,2,3,4,5,6,7,8,9};
bool p(int i,int j){
	if(abs(a[i]-a[j])==1)return true;
	else return false;
}
bool check(){
	if(p(0,1)||p(0,4)||p(0,3)||p(0,5)||p(1,2)||p(1,5)||p(1,4)
	||p(1,6)||p(2,5)||p(2,6)||p(3,4)||p(3,7)||p(3,8)||p(4,7)
	||p(4,5)||p(4,8)||p(4,9)||p(5,6)||p(5,8)||p(5,9)||p(6,9)
	||p(7,8)||p(8,9))return false;
	return true;
}
int main()
{
    int n=1;//n先是为1 
    for(int i=1;i<=10;i++)n*=i;//全排列总数
    int cnt=0;
	while(n--){
		next_permutation(a,a+10);
		if(check())cnt++;
	} 

    cout<<cnt<<endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王子y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值