第七届蓝桥杯第6题:方格填数
2018-03-22 11:18
351 查看
如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?(数字不能重复使用)
请填写表示方案数目的整数。
博主用全排列的方法写的算法
import java.util.Arrays;
public class ListBox {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int an[]=new int[10];
for(int i=0;i<an.length;i++)
{
an[i]=i;
}
List perm=new List(an);
System.out.println(perm.count);
}
}
class List{
int a[];
int list[]=new int[30];
int count=0;
void print(){
//扩大格子,并给格子赋值
for(int x=0;x<list.length;x++)
{
list[x]=12;
}
list[8]=a[0];
list[9]=a[1];
list[10]=a[2];
list[13]=a[3];
list[14]=a[4];
list[15]=a[5];
list[16]=a[6];
list[19]=a[7];
list[20]=a[8];
list[21]=a[9];
for(int x=0;x<list.length;x++)
{
if(list[x]/10!=0)
{
continue;
}
if(!check(x))
{
return; //如果不符合,结束print()方法
}
}
count++;
}
public List(int[] a)
{
this.a=a;
perm(0);
}
boolean check(int ps)
{
if(Math.abs(list[ps]-list[ps-6])==1||Math.abs(list[ps]-list[ps-7])==1||Math.abs(list[ps]-list[ps-5])==1
||Math.abs(list[ps]-list[ps-1])==1||Math.abs(list[ps]-list[ps+1])==1||Math.abs(list[ps]-list[ps+6])==1
||Math.abs(list[ps]-list[ps+5])==1||Math.abs(list[ps]-list[ps+7])==1)
{
return false;
}
return true;
}
void perm(int offset)
{
if(offset==a.length-1)
{
print();
return;
}
else
{
for(int i=offset;i<a.length;i++)
{
swap(i,offset);
perm(offset+1);
swap(offset,i);
}
}
}
void swap(int i,int offset)
{
int temp;
temp=a[i];
a[i]=a[offset];
a[offset]=temp;
}
}
大家都看出来了,我这里吧十个格子扩展格子成了30个5X6的,这样每个都可以检查周围8个格子了
相关文章推荐
- 第七届蓝桥杯第6题:方格填数
- 第七届蓝桥杯省赛C语言B组第6题 方格填数
- 第七届 蓝桥杯 c/c++ B组 省赛 (6)——方格填数
- 第七届 蓝桥杯 省赛 第六题 方格填数(next_permutation)
- 第七届蓝桥杯 方格填数
- 第七届蓝桥杯 省赛B组方格填数
- 第七届蓝桥杯软件类省赛真题-C-B-6_方格填数
- 蓝桥杯第七届 方格填数(dfs)
- 2016年第七届蓝桥杯C/C++A组第三题---方格填数
- 蓝桥杯 第七届省赛试题 方格填数
- 蓝桥杯第七届个人赛方格填数
- 2016年第七届蓝桥杯Java 方格填数
- 蓝桥杯第七届方格填数法二
- 蓝桥杯-第七届Java语言B组-方格填数
- 第七届蓝桥杯C\C++B组省赛题目——方格填数
- 蓝桥杯-第七届省赛javaB组-方格填数
- 第七届蓝桥杯【省赛试题6】方格填数
- 2016第七届蓝桥杯-方格填数
- 第七届蓝桥杯_方格填数_简单搜索
- 第七届蓝桥杯b组第六题-方格填数