栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

蓝桥别Java习题练习:方格分割

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥别Java习题练习:方格分割

目录

题目描述解题思路源代码其他真题

题目描述

6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。

如图:p1.png, p2.png, p3.png 就是可行的分割法。

试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。

请提交该整数,不要填写任何多余的内容或说明文字。


解题思路

我们看到这道题,首先以为是在格子里面做标记来做题。实际上这样很麻烦。我们应当是线段交点标记来做题。

以最中间的交点(3,3)为基点进行移动。有两个指针,两指针行走的方向必相反。最终把格子分成对称的两块。

看到有题目提示“注意:旋转对称的属于同一种分割法。”。那么,最终答案应该要除于4。因为一个图形,旋转4个90度,都是一样的。

答案:509 源代码

public class Main {
	static int ans;//答案变量
	static int[][] dire={ {-1,0},{1,0},{0,-1},{0,1} };//四个方向
	static int[][] vis=new int[7][7];//0~6
	
	static void dfs(int x,int y) {
		if(x==0||y==0||x==6||y==6) {//满足条件的,就ans++
			ans++;
			return;
		}
		//当前的点标注为已访问
		vis[x][y]=1;
		//对称点也标注为已访问
		vis[6-x][6-y]=1;
		for(int k=0;k<4;k++) {
			int nx=x+dire[k][0];
			int ny=y+dire[k][1];
			//新坐标
			if((nx < 0)|| nx> 6||ny<0||ny>6) continue;
			if(vis[nx][ny]==0) {
				dfs(nx,ny);
			}
		}
		//回溯
		vis[x][y]=0;
		vis[6-x][6-y]=0;
	}
	
	public static void main(String[] args) {
		dfs(3,3);
		System.out.println(ans/4);
	}
}
其他真题

13年蓝桥杯Java A组省赛
第一题世纪末的星期
第二题振兴中华
第三题梅森素数
第四题颠倒的价牌
第五题三部排序
第六题逆波兰表达式
第七题错误票据
第八题带分数
第九题剪格子
第十题大臣的旅费

13年蓝桥杯Java B组省赛
第一题世纪末的星期
第二题马虎的算式
第三题振兴中华
第四题黄金连分数
第五题有理数类
第六题三部排序
第七题错误票据
第八题幸运数
第九题带分数
第十题连号区间数

13年蓝桥杯Java C组省赛
2013年第四届蓝桥杯Java C组省赛1~5题
2013年第四届蓝桥杯Java C组省赛6~10题

17年蓝桥杯Java A组省赛
第一题:迷宫
第二题:9数算式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号