java算法编程题_【java题目】考验你编程能力和算法的时候到了
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是我写的,但是算法很复杂,唉,求高手啊
package com.sky.woodwall;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class
CalculateClass{
//用于填充方块的元素,支持任意图形,1代表此位置有填充物,0代表此处是空的
private static int[][][] blocks = {
{{1}},//表示基本方块
{{1,1}},//表示横着2格长度的方块
{{1},{1}},//表示竖着2格长度的方块
//{{1,0,1},{1,1,1}}//表示凹字的方块
};
//用于保存每种方案的步骤
private static List list=new
ArrayList();
//根据n和k计算填充方案的方法
public static int calculate(int n, int k) {
int[][] wall=new int[k][2*n];
//开始填充
run(wall,"");
//去掉方案中有重复项的方案
removeDuplicate(list);
return list.size();
}
private static void run(int[][] wall,String
steps){
for(int i=0;i
//每次循环都必须和参数中的wall一致。
int[][] annotherWall=copy(wall);
//进行填充操作并记录步骤
String step = fill(annotherWall, blocks[i]);
if(step==null){
if(isFillFull(annotherWall)) {
list.add(steps);
break;
}
}else{
//递归
run(annotherWall,steps+step+"\n");
}
}
}
//拷贝二维数组
private static int[][] copy(int[][] wall){
int[][] temp=new int[wall.length][];
for(int i=0;i
temp[i]=Arrays.copyOf(wall[i],
wall[i].length);
}
return temp;
}
//判断是否填满
private static boolean isFillFull(int[][]
wall){
for(int i=0;i
for(int j=0;j
if(wall[i][j]==0) return false;
}
}
return true;
}
//将指定的填充方块填入墙面中
private static String fill(int[][]
wall,int[][] block){
int[] position = getPosition(wall, block);
if (position[0]==-1) {
return null;
}
String step="将"+sysout(block)+"插入"+sysout(position)+"坐标位置";
for(int m=0;m
for(int n=0;n
if(block[m][n]==1){
wall[position[0]+m][position[1]+n]=1;
}
}
}
return step;
}
//计算填充的起始点
private static int[] getPosition(int[][]
wall,int[][] block){
int[] startPosition={-1,-1};
for(int i=0;i
for(int j=0;j
if(wall[i][j]==1) continue;
boolean error=false;
for(int m=0;m
for(int n=0;n
if(block[m][n]==1 &&
(i+m)
if(startPosition[0]==-1){
startPosition=new int[]{i,j};
}
}else{
error=true;
break;
}
}
if(error) break;
}
if(!error) return startPosition;
else {
startPosition=new int[]{-1,-1};
}
}
}
return startPosition;
}
//去除重复的步骤
private static void
removeDuplicate(List strList){
Set set=new
HashSet();
for (String str1 : strList) {
String[] split = str1.split("\n");
Arrays.sort(split);
set.add(Arrays.toString(split));
}
list=new ArrayList(set);
}
private static String sysout(int[][] temp){
StringBuilder sb=new StringBuilder();
for (int[] is : temp) {
sb.append(sysout(is)).append(",");
}
return
sb.length()>0?sb.substring(0,sb.length()-1):sb.toString();
}
private static String sysout(int[] is) {
//System.out.println(Arrays.toString(is));
return Arrays.toString(is);
}
// start 提示:自动阅卷起始唯一标识,请勿删除或增加。
public static void main(String args[]) {
int calculate = calculate(1, 2);
System.out.println("总共的方案一共有"+calculate+"种。");
for (String string : list) {
System.out.println(string);
}
}
// end //提示:自动阅卷结束唯一标识,请勿删除或增加。
}
java算法编程题_【java题目】考验你编程能力和算法的时候到了相关推荐
- Java编程题_面向对象和常用API01_B级
Java编程题_面向对象和常用API01_B级 第1题 面向对象.异常.集合.IO 题干: 请编写程序,完成键盘录入学生信息,并计算总分将学生信息与总分一同写入文本文件 需求:键盘录入3个学生信息(姓 ...
- 剑指offer编程题(JAVA实现)——第35题:数组中的逆序对
github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第35题:数组中的逆序对 题目描述 在数组中的两个数字,如果前 ...
- 剑指offer编程题(JAVA实现)——第38题:二叉树的深度
github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第38题:二叉树的深度 题目描述 输入一棵二叉树,求该树的深度 ...
- java猜字母游戏_JAVA编程题-用java编写猜字母游戏
原标题:JAVA编程题-用java编写猜字母游戏 问题: 猜字母游戏,其游戏规则为: 程序随机产生5个按照一定顺序排列的字符作为猜测的结果,由玩家来猜测此字符串.玩家可以猜测多次,每猜测一次,则由系统 ...
- 环评师c语言题目,C语言考试——编程题_文库吧
C语言考试--编程题_文库吧 2020-09-27 08:21:23 [导读]该数本身,比如153=13+53+33,故153是水仙花数).要求将判断某数是否素数的功.能编成一个独立的函数,然后在ma ...
- Linux环境编程姜林美,Linux环境编程习题_编程题_答案.pdf
Linux环境编程习题_编程题_答案 Linux 境编程-人民邮电出版社-姜林美 课后习题(编程题)答案 第三章 1 第五章 4 第六章 9 第七章 19 第八章 22 第九章 35 第十章 38 三 ...
- 算法百题斩其三: 单源最短路与算法——其一
算法百题斩其三: 单源最短路与算法--其一 写在前面:何所谓"斩"? 斩,即快速而有力地切断,指我们用最精简的语言,一针见血地点破算法题的核心难点.斩需三思而后行:斩需借助外力.旁 ...
- c语言编程题大学,大学C语言程序设计(编程题).pdf
C 语言程序设计习题(编程题) C 语言程序设计习题(编程题) 习题1(编程题)[知识点:基础知识] 2 2 2 2 编制程序,要求输入整数a 和b ,若a +b 大于100,则输出a +b 百位以上 ...
- java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现
看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...
- java 编程题_最新JAVA编程题全集(50题及答案)92862
<最新JAVA编程题全集(50题及答案)92862>由会员分享,可在线阅读,更多相关<最新JAVA编程题全集(50题及答案)92862(32页珍藏版)>请在人人文库网上搜索. ...
最新文章
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
- mdcsoft服务器网络安全解决方案-SQL注入解决
- 解决内存瓶颈和计算负载问题,韩松团队提出 MCUNetV2
- CNN 与 Transformer 的强强联合!谷歌最新开源 BoTNet,ImageNet 达 84.7%准确率
- boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST
- D3DCOLOR与D3DXCOLOR
- Codeforces Round #564 (Div. 2) C. Nauuo and Cards
- 让nginx支持文件上传的几种模式
- 旋转数组(右旋转,js实现,unshift,splicec实现)
- 今晚博文视点大咖直播伴你读No.2:人工智能学习路线
- C语言pid算法模糊控制,温度PID模糊控制的算法完整
- VBA 根据模板批量生成工作表
- java如何解除文件锁定状态_Eclipse操作SVN时中断锁定,文件的解锁方法
- Altium Designer 18中的Data Management–Device Sheets
- 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 8月13日
- Hive 优化(通用版)
- Mencoder转换视频格式(1)
- nginx利用ngx_http_geoip2_module模块对国外ip限制
- 【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数
- 麦克风阵列声源定位解决方案