每日算法之方格填数

如下的10个格子

参看下图

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

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

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

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

个人认为也是属于解法类型的,还是需要借助前面的题目,只是验证方法不一样而已

 1 package Square_Fill;
 2
 3 public class Main{
 4     static  int count =0;
 5
 6     public  static  void main(String  args[]){
 7         char []str = "0123456789".toCharArray();
 8         paixu(str,0,9);
 9         System.out.println(count);
10     }
11     public  static  void swap(char[] str,int a, int b){
12         char temp ;
13         temp = str[a];
14         str[a] = str[b];
15         str[b]  = temp;
16     }
17     public  static boolean check(char[] str){
18         if(check2(str[0],str[1])&&check2(str[0],str[3])&&check2(str[0],str[4])&&check2(str[0],str[5])&&check2(str[1],str[2])&&
19                 check2(str[1],str[4])&&check2(str[1],str[5])&&check2(str[1],str[6])&&check2(str[2],str[5])&& check2(str[2],str[6])&&
20                 check2(str[3],str[4])&&check2(str[3],str[7])&&check2(str[3],str[8])&&check2(str[4],str[5])&& check2(str[4],str[7])&&
21                 check2(str[4],str[8])&&check2(str[4],str[9])&&check2(str[5],str[6])&&check2(str[5],str[9])&& check2(str[5],str[8])&&
22                 check2(str[6],str[9])&&check2(str[7],str[8])&&check2(str[8],str[9]))
23         {
24             return true;
25         }
26         else  return false;
27
28     }
29     public  static  boolean check2(char a,char b){
30         if(a==(b+1)||a==(b-1)){
31             return  false;
32         }
33         return  true;
34     }
35     public  static  void paixu(char[] str,int a,int length){
36         if(a==length){
37             if(check(str)){
38                 count++;
39                 System.out.println(String.valueOf(str));
40             }
41         }else
42         {
43             for(int i=a;i<=length;++i){
44                 swap(str,i,a);
45                 paixu(str,a+1,length);
46                 swap(str,i,a);
47             }
48         }
49     }
50 }

原文地址:https://www.cnblogs.com/lenkong/p/8810293.html

时间: 2024-10-07 20:28:38

每日算法之方格填数的相关文章

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

第一部分:题目 方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ (如果显示有问题,也可以参看下图) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 第二部分:思路 这个题目有点表述不明,不知道0~

蓝桥杯 方格填数 回溯法

方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 回溯法解决的源代码如下: #include<ios

hdoj 3657 Game 【最小割 方格填数加强版】

Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1076    Accepted Submission(s): 456 Problem Description onmylove has invented a game on n × m grids. There is one positive integer on each g

第七届蓝桥杯—第六题||方格填数

如图,如下的10个格子,填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻)一共有多少种可能的填数方案? 请填写表示方案数目的整数. 思路:直接 暴力求解,依次向每个格子填数与已经填入的进行比较是否连续,即:是否两者之差的绝对值为1. 答案:  1580 (我考虑每个数字都不相同) #include<iostream> #include<cmath> using namespace std; int main(void){ int count=0; for

方格填数

如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+ (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. public class Main { static int count; public

HDU-1794 方格填数 (贪心+四分)

题目大意:给一个由自然数构成的nxn方阵,其中有k个元素为0,现在要从给出的m个元素中挑出k个填入矩阵,是和的增量最大.和定义为所有子方阵上的元素之和. 题目分析:对于尺寸固定的方阵,计算和的时候每个元素做加数的次数是可以求出的,只需将最大的数放入做加数次数最多的位置,以此类推,便得到答案.要预先处理出每个位置上的元素做加数的次数,我用的四分. 代码如下: # include<cstdio> # include<cstring> # include<iostream>

【算法】矩阵填数,深度优先搜索(DFS),Pascal改C语言

面向对象的上机实验 题目 以下列方式向 5*5 矩阵中填入数字.设数字i(1=<i<=25),则数字i+1 的坐标位置应为(E, W).(E, W)可根据下列关系由(x,y)算出: 1)(E, W)=(x±3,y) 2)(E, W)=(x,y±3) 3)(E, W)=(x±2,y±2) 求解问题如下: 编写一个程序,当数字1被指定于某个起始位置时,列举出其它24个数字应在的位置:列举该条件下的所有可能方案. 参考答案 网上搜索到数学奥赛中本题的Pascal代码 来自http://blog.si

C++ P1187 方格填数

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std; int N,a[15][15],t,moh[]={-1,1,0,0},mol[]={0,0,-1,1};bool back,u[105],p[105][105];//p用于判断每一个数和那些数字相加是质数: /*思路:1.n^2-1步:2.第k步走出去以后有n^2-k+1种选择:3.最多

每日一小练——快速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:快速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有如下规律: 尝试寻找快速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了! 其实题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,不过因为求解快速方法在递归之前,我编写了一个非递归的算法 #include <iostream> usi