统计
  • 建站日期:2019-12-01
  • 文章总数:2453 篇
  • 评论总数:2167 条
  • 分类总数:22 个
  • 最后更新:5月30日
文章 未分类

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

程序员阿鑫
首页 未分类 正文

题目:

如下的10个格子


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

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

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

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

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

思路:

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


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

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

代码:

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

  1. package com.cxyax.review;
  2. import java.util.Set;
  3. import java.util.TreeSet;
  4. public class Main3 {
  5. static int[] nums = {0,1,2,3,4,5,6,7,8,9};
  6. static Set<String> set = new TreeSet<String>();
  7. public static void f(int x){
  8. String str = "";
  9. //每个格子都减一次,绝对值不为1,就不用判断-1,减过得格子不用进行二次判断
  10. 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 &&
  11. 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 &&
  12. Math.abs(nums[2] - nums[5]) != 1 && Math.abs(nums[2] - nums[6]) != 1 &&
  13. Math.abs(nums[3] - nums[4]) != 1 && Math.abs(nums[3] - nums[7]) != 1 && Math.abs(nums[3] - nums[8]) != 1 &&
  14. 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 &&
  15. Math.abs(nums[5] - nums[6]) != 1 && Math.abs(nums[5] - nums[8]) != 1 && Math.abs(nums[5] - nums[9]) != 1 &&
  16. Math.abs(nums[6] - nums[9]) != 1 &&
  17. Math.abs(nums[7] - nums[8]) != 1 &&
  18. Math.abs(nums[8] - nums[9]) != 1){
  19. for(int i = 0; i < nums.length;i++){
  20. str += nums[i]+"";
  21. }
  22. set.add(str);
  23. }
  24. //全排列
  25. for(int i = x; i < nums.length;i++){
  26. int y = nums[x];
  27. nums[x] = nums[i];
  28. nums[i] = y;
  29. f(x+1);
  30. y = nums[x];
  31. nums[x] = nums[i];
  32. nums[i] = y;
  33. }
  34. }
  35. public static void main(String[] args) {
  36. f(0);
  37. System.out.println(set.size());
  38. }
  39. }

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

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

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

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

发表评论


扫一扫,支付10
支付完成后,请等待5秒左右。手机请点此支付!