博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯真题 16省6-方格填数 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请输出表示方案数目的整数。 注意:你输出的应该是一
阅读量:3961 次
发布时间:2019-05-24

本文共 2253 字,大约阅读时间需要 7 分钟。

问题描述

如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+(如果显示有问题,也可以参看【图1.jpg】)

在这里插入图片描述

填入0~9的数字。要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)

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

请输出表示方案数目的整数。

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

没有输入。

输出

输出一个整数,即可能的填数方案数。

题目限制

1s, 1024KiB for each test case.

提示

用printf或和cout输出答案。

思路:

又是一个典型全排列题!emmm最近小编在整理这一类题,所以都是排列组合的题(嘻嘻~)这道题依然是生成全排列,然后依次判断是否符合题目的要求就行了。有两种方法,一种是一个一个的判断,用一个if语句,当时写出来的时候感觉心态都崩了,代码见下。但好在也是对的。后来问了老师,原来可以找规律用循环写,我瞬间感觉自己是个笨b。T_T

代码如下:(第一个方法,无脑判断)

#include 
#include
using namespace std;int num = 0;void disp(int *a){
if(((a[0]-a[1]!=1)&&(a[0]-a[1]!=1)&&(a[0]-a[3]!=1)&&(a[0]-a[4]!=1)&&(a[0]-a[5]!=1))&&((a[1]-a[0]!=1)&&(a[1]-a[4]!=1)&&(a[1]-a[5]!=1)&&(a[1]-a[6]!=1)&&(a[1]-a[2]!=1))&&((a[2]-a[1]!=1)&&(a[2]-a[5]!=1)&&(a[2]-a[6]!=1))&&((a[3]-a[7]!=1)&&(a[3]-a[8]!=1)&&(a[3]-a[4]!=1)&&(a[3]-a[0]!=1))&&((a[4]-a[3]!=1)&&(a[4]-a[7]!=1)&&(a[4]-a[8]!=1)&&(a[4]-a[9]!=1)&&(a[4]-a[5]!=1)&&(a[4]-a[1]!=1)&&(a[4]-a[0]!=1))&&((a[5]-a[0]!=1)&&(a[5]-a[4]!=1)&&(a[5]-a[8]!=1)&&(a[5]-a[9]!=1)&&(a[5]-a[6]!=1)&&(a[5]-a[2]!=1)&&(a[5]-a[1]!=1))&&((a[6]-a[1]!=1)&&(a[6]-a[5]!=1)&&(a[6]-a[9]!=1)&&(a[6]-a[2]!=1))&&((a[7]-a[3]!=1)&&(a[7]-a[4]!=1)&&(a[7]-a[8]!=1))&&((a[8]-a[3]!=1)&&(a[8]-a[4]!=1)&&(a[8]-a[5]!=1)&&(a[8]-a[7]!=1)&&(a[8]-a[9]!=1))&&((a[9]-a[4]!=1)&&(a[9]-a[5]!=1)&&(a[9]-a[6]!=1)&&(a[9]-a[8]!=1))) num++;}int main(){
int n=10; int a[]={
0,1,2,3,4,5,6,7,8,9}; do {
disp(a); } while (next_permutation(a,a+n)); printf("%d",num); return 0;}

在小编的编辑页面可以看到有这么多T_T但功能是好的。

在这里插入图片描述
(第二种方法就很简单了,分别从4个方向判断就行了)
分别是:左右检测 上下检测 左斜检测 右斜检测。

#include 
#include
#include
using namespace std;int num = 0;/*用四个循环 左右检测 上下检测 左斜检测 右斜检测==1的话返回0在主函数里面if检测 上面四个循环的返回值 */ int disp (int *a,int n){
int i; for(i=0;i<9;i++) {
if(abs(a[i]-a[i+1])==1 && i!=2 && i!=6 ) return 0; } for(i=0;i<6;i++) {
if(abs(a[i]-a[i+4])==1) return 0; } for(i=0;i<7;i++) {
if(abs(a[i]-a[i+3])==1 && i!=3) return 0; } for(i=0;i<5;i++) {
if(abs(a[i]-a[i+5])==1 && i!=2) return 0; } return 1;} int main(){
int a[]={
0,1,2,3,4,5,6,7,8,9}; int n=10; do {
if(disp(a,n)==1) {
num++; } }while(next_permutation(a,a+n)); printf("%d",num); return 0; }

转载地址:http://fsrzi.baihongyu.com/

你可能感兴趣的文章
杭电ACM——2566,统计硬币(DP)
查看>>
堆栈(数据结构)
查看>>
队列(数据结构)
查看>>
Mule ESB-Content-Based Routing Tutorial(1)
查看>>
Mule ESB-Content-Based Routing Tutorial(2)
查看>>
Mule ESB-Content-Based Routing Tutorial(3)
查看>>
年末项目经验总结
查看>>
做事情要放下面子,拿起责任
查看>>
敏捷开发实践(1)-故事工作量估算导致的问题
查看>>
记一次解决jenkins持续构建,自动部署的问题
查看>>
敏捷开发实践(2)-要不要文档?
查看>>
《java系统性能调优》--2.缓存
查看>>
JAVA注解引发的思考
查看>>
写博意味着什么
查看>>
比较Cint() , int() , fix() ,round()的区别
查看>>
举例说明常用字符串处理函数
查看>>
软件生存期模型
查看>>
制定计划(问题的定义,可行性研究)
查看>>
需求分析
查看>>
软件设计
查看>>