作者文章来源:
http://www.iteye.com/topic/545378
一个画图程序 要求打印出 :
int i=5;
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
int i=6
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
解决方法一:
class snakePrint {
static int length = 7;
static int value = 1;
static int[][] snake = new int[length][length];
static Direction lastDirection = Direction.Right;
static enum Direction {
Right, Down, Left, Up;
}
public static void initialArray() {
int row = 0, line = 0;
for (int c = 0; c < length * length; c++) {
snake[row][line] = value;
lastDirection = findDirection(row, line);
switch (lastDirection) {
case Right:
line++;
break;
case Down:
row++;
break;
case Left:
line--;
break;
case Up:
row--;
break;
default:
System.out.println("error");
}
value++;
}
}
static Direction findDirection(int row, int line) {
Direction direction = lastDirection;
switch (direction) {
case Right: {
if ((line == length - 1) || (snake[row][line + 1] != 0))
direction = direction.Down;
break;
}
case Down: {
if ((row == length - 1) || (snake[row + 1][line] != 0))
direction = direction.Left;
break;
}
case Left: {
if ((line == 0) || (snake[row][line - 1] != 0))
direction = direction.Up;
break;
}
case Up: {
if (snake[row - 1][line] != 0)
direction = direction.Right;
break;
}
}
return direction;
}
public static void main(String[] args) {
initialArray();
// display.....
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
System.out.print(snake[i][j] + " ");
}
System.out.println();
}
}
}
解决方法二:
public static void main(String args[]){
int N=5;
int a[][]=new int[N][N];
int i=0,j=0;
int count=1;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a[i][j]=0;
}
}
i=0;
j=0;
for(int k=0;k<=N/2;k++){
i=k;
j=k;
for(i=k;i<N-k;i++){
a[j][i]=count;
count++;
}
i=N-k-1;
for(j=k+1;j<N-k;j++){
a[j][i]=count;
count++;
}
j=N-k-1;
for(i=N-k-2;i>=k;i--){
a[j][i]=count;
count++;
}
i=k;
for(j=N-k-2;j>=1+k;j--){
a[j][i]=count;
count++;
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
方法三:
<PRE class=java name="code">/*
*
int baseNum=i
1 2 3 ... i
4i-4 (4i-4)+1 ... (4i-4)+(i-2) i+1
... ... ... ... i+2
... (4i-4)+[3(i-2)-2] ... (4i-4)+(i-2)+(i-2-1) ...
3i-2 3i-3 ... 2i i+(i-1)
*/
/**
*
* @author
*/
public class PrintSnakeNumberSquare {
public static void printN(int baseNum){
System.out.println("int baseNum="+baseNum);
for(int i=0;i<baseNum;i++){
printN_M(baseNum,i,0);
System.out.println();
}
}
/**
* 打印baseNum宽度的第row行
* @param baseNum:打印正方形的边长
* @param row:打印正方形的第 row 行
* @param outNumber :这个正方形外面层数所占用的数字个数,最外面一层此值为0;
* 长度为n的正方形占用4*n-4个数字,第i层递归需传入前i-1层所占数字总和。
*/
public static void printN_M(int baseNum,int row,int outNumber){
if(row==0){//如果是第一行
for(int i=1;i<=baseNum;i++){
System.out.format("%3s",i+outNumber);
}
return ;
}
if(row==(baseNum-1)){//如果是最后一行
for(int i=(3*baseNum-2);i>=2*baseNum-1;i--){
System.out.format("%3s", i+outNumber);
}
return;
}
//row 如果不是第一行或者最后一行,则可以分为三部分
// 边长为baseNum正方形第row行的第一个数 ,边长为baseNum-2的第row-1行 ,边长为baseNum正方形的第row行的最后一个数
//print first number of the row
System.out.format("%3s",4*baseNum-3-row+outNumber);
//print middle part of the row by recursive print
int nextBaseNum=baseNum-2;
int nextRow=row-1;
if(nextBaseNum>0&&nextRow>=0){
printN_M(nextBaseNum,nextRow,outNumber+4*baseNum-4);
}
//print last number of the row
System.out.format("%3s",baseNum+row+outNumber);
}
public static void main(String[] args){
PrintSnakeNumberSquare.printN(3);
PrintSnakeNumberSquare.printN(4);
PrintSnakeNumberSquare.printN(5);
PrintSnakeNumberSquare.printN(7);
}
}</PRE>
<PRE class=java name="code">int baseNum=3
1 2 3
8 9 4
7 6 5
int baseNum=4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
int baseNum=5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
int baseNum=7
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13
</PRE>
分享到:
相关推荐
前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...
大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...
rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:...
大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...
医疗卫生面试真题:卫生类典型面试题汇总及答案(23)借鉴.pdf
* 根据面试类型:可以将面试小抄面试题分为技术面试题、行为面试题、智慧面试题等。 * 根据面试难度:可以将面试小抄面试题分为简单、中等、困难三类。 * 根据面试领域:可以将面试小抄面试题分为IT面试题、金融面试...
标题中的“答复: 一道经典线程面试题的4种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...
公务员面试备考指导:领导决策类面试题通关技巧.pdf
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
面试高频算法题总结-剑指Offer题解,主要包含: 数据结构 数组 字符串 链表 栈和队列 二叉树 图 堆 线段树 字典树 单调栈 算法 二分查找 排序 递归 动态规划 分治 记忆化搜索 贪心 回溯 位运算 数学 设计 其他 共66...
本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、库函数等各个方面的基础知识,介绍了面向对象编程基本概念,包括如何实现继承、多态和封装等。还介绍了排序...
172份,7701页互联网大厂面试题 172份,7701页互联网大厂面试题 172份,7701页互联网大厂面试题
云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...
kafka标题:2024年必考Kafka面试题及详细答案 内容概要:本套面试题包含10个关于Kafka的高频面试题,覆盖了Kafka的基本概念、特点、消息传递语义、Offset、Replication、Consumer Group、ISR、Leader Election、消息...
介绍:收集Linux操作系统及Shell脚本编程在测试开发中的重要面试题,助力系统管理和自动化任务。 标签:#Linux #Shell #操作系统 #面试题 #脚本编程 #文件管理 #权限 #网络管理 #自动化 #系统监控
前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,涵盖了HTML、CSS、JavaScript、前端框架和工具等方面; 前端面试题:前端开发面试题大全,...
大厂面试题:百度历年笔试面试150题分享给需要的同学,逢考必过!
* 双链表找相交结点:这是一道经典的链表算法题,考察了候选人的链表操作能力和问题解决能力。 * 10亿数,找最大100个数:这是一道大数据处理题,考察了候选人的数据处理能力和算法设计能力。 * 递归反转栈:这是...
2008/06/17 18:40 2,775 .et面试题系列文章七(附答案).txt 2008/06/17 18:37 4,246 .net 最新面试题.txt 2008/06/17 18:38 7,017 .net 面试题(高级开发人员篇).txt 2008/06/17 18:44 3,868 .net 面试题系列九.txt ...
现在五块钱的付出,将来收获的可能是一份心仪的offer,干货满满,建议下载。...友情提示:本套面试题包括面试题900题+公司实战面试题400问,面试题已经整理好答案,公司题由于新收录没有答案,但非常有参考价值。