第七届蓝桥杯省赛C++B组 方格填数

21 篇文章 1 订阅
7 篇文章 1 订阅

方格填数

如下的10个格子填入0~9的数字。     (如果显示有问题,也可以参看【图1.jpg】)
     +--+--+--+
      |    |     |     |
+--+--+--+--+
 |    |     |    |     |
+--+--+--+--+
 |    |     |    |
+--+--+--+

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

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

请填写表示方案数目的整数。

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

 

答案:1580

思路:看到0~9数字我就想到了全排列hhhhh虽然我知道这样判断条件会有毒了一点……

代码:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<map>  
#include<set>
using namespace std;

int main()
{
	int num[10]={0,1,2,3,4,5,6,7,8,9};
	int ans=0;
	do
	{
		if(abs(num[0]-num[1])==1 || abs(num[0]-num[3])==1 || abs(num[0]-num[4])==1 || abs(num[0]-num[5])==1 || abs(num[1]-num[2])==1 || abs(num[1]-num[4])==1 || abs(num[1]-num[5])==1 || abs(num[1]-num[6])==1 || abs(num[2]-num[5])==1 || abs(num[2]-num[6])==1 || abs(num[3]-num[4])==1 || abs(num[3]-num[7])==1 || abs(num[3]-num[8])==1 || abs(num[4]-num[5])==1 || abs(num[4]-num[7])==1 || abs(num[4]-num[8])==1 || abs(num[4]-num[9])==1 || abs(num[5]-num[6])==1 || abs(num[5]-num[8])==1 || abs(num[5]-num[9])==1 || abs(num[6]-num[9])==1 || abs(num[7]-num[8])==1 || abs(num[8]-num[9])==1)
			continue;
		else
			ans++;
	}while(next_permutation(num,num+10));
	cout<<ans<<endl;
	return 0;
}

PS:也可以用dfs解决,传送地址:http://blog.csdn.net/y1196645376/article/details/50938608

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值