统计
  • 建站日期:2021-03-10
  • 文章总数:688 篇
  • 评论总数:725 条
  • 分类总数:10 个
  • 最后更新:12月3日
文章 精密算法

JAVA 蓝桥杯 第七届B组 第六题 方格填数 带思路

程序员阿鑫
首页 精密算法 正文

题目:

如下的10个格子


JAVA蓝桥杯第七届B组第六题方格填数带思路
-程序员阿鑫-带你一起秃头!
-第1
张图片

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

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

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

思路:

第一开始想的是用二维数组,后来觉得太麻烦,直接用一维数组去判断


JAVA蓝桥杯第七届B组第六题方格填数带思路
-程序员阿鑫-带你一起秃头!
-第2
张图片

不用想太复杂,把每个格子减一边值的绝对值不为1即可

例如:

0-1 , 0-3 , 0-4 , 0-5;

1-2 ,1-4 ,1-5 ,1-6;

2-5 ,2-6,;

3-4 ,3-7 ,3-8;

4-5 ,4-7 , 4-8 ,4-9;

5-6, 5-8 , 5-9;

7-8 ;

8-9;

不需要在用1-0,...的重复判断,绝对值不为1即可

利用全排列对数值进行排列筛选放入Set集合去重

最后输出Set集合长度

答案:

1580

代码:

在网站上看有点乱,可以复制到编译器中查看

package com.cxyax.review;

import java.util.Set;
import java.util.TreeSet;

public class Main3 {
    static int[] nums = {0,1,2,3,4,5,6,7,8,9};
    static Set<String> set = new TreeSet<String>();

    public static void f(int x){
        String str = "";
        //每个格子都减一次,绝对值不为1,就不用判断-1,减过得格子不用进行二次判断
        if(Math.abs(nums[0] - nums[1]) != 1 && Math.abs(nums[0] - nums[3]) != 1 && Math.abs(nums[0] - nums[4]) != 1 && Math.abs(nums[0] - nums[5]) != 1 &&
            Math.abs(nums[1] - nums[2]) != 1 && Math.abs(nums[1] - nums[5]) != 1 && Math.abs(nums[1] - nums[6]) != 1 && Math.abs(nums[1] - nums[4]) != 1 &&
            Math.abs(nums[2] - nums[5]) != 1 && Math.abs(nums[2] - nums[6]) != 1 &&
            Math.abs(nums[3] - nums[4]) != 1 && Math.abs(nums[3] - nums[7]) != 1 && Math.abs(nums[3] - nums[8]) != 1 &&
            Math.abs(nums[4] - nums[5]) != 1 && Math.abs(nums[4] - nums[7]) != 1 && Math.abs(nums[4] - nums[8]) != 1 && Math.abs(nums[4] - nums[9]) != 1 &&
            Math.abs(nums[5] - nums[6]) != 1 && Math.abs(nums[5] - nums[8]) != 1 && Math.abs(nums[5] - nums[9]) != 1 &&
            Math.abs(nums[6] - nums[9]) != 1 &&
            Math.abs(nums[7] - nums[8]) != 1 && 
            Math.abs(nums[8] - nums[9]) != 1){
            for(int i = 0; i < nums.length;i++){
                str += nums[i]+"";
            }
            set.add(str);

        }
        //全排列
        for(int i = x; i < nums.length;i++){
            int y = nums[x];
            nums[x] = nums[i];
            nums[i] = y;
            f(x+1);
            y = nums[x];
            nums[x] = nums[i];
            nums[i] = y;
        }
    }

    public static void main(String[] args) {
        f(0);
        System.out.println(set.size());
    }

}

以上是《JAVA 蓝桥杯 第七届B组 第六题 方格填数 带思路》的全部内容,

感谢您对程序员阿鑫博客的支持!

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2020-10-16,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
JAVA 蓝桥杯 第九届C组 第七题 缩位求和 带思路
« 上一篇
JAVA 蓝桥杯算法 全排列 背公式即可
下一篇 »
为了防止灌水评论,登录后即可评论!
注册登录

HI ! 请登录
注册会员,享受下载全站资源特权。
登陆 注册
上号,带你一起秃头!

IP地址

热门文章

1
抖音无限礼物模拟小工具分享
2
QQ假红包引流QQ群教程及代码
4
卡QQ永久大会员方法

最新文章

标签