闲的无聊,写个蛇形矩阵算法玩玩,欢迎来拍!

Cody_Yu 2010-10-28 10:48:33
闲的无聊,写个蛇形矩阵算法玩玩,欢迎来拍!

调整M\N\firstDown来改变输出形式。

import java.text.*;
public class Snake {
private static DecimalFormat df2 = new DecimalFormat("00");
public static void main(String[] args) {
int M = 4;
int N = 6;
boolean firstDown = true;

for(int n=0; n<N; n++){
for(int m=0; m<M; m++){
System.out.print(df2.format(getSnake(m, n, M, N, firstDown)));
System.out.print(" ");
}
System.out.println();
}
}
private static int getSnake(final int m, final int n, final int M, final int N, boolean firstDown){
final int MM = M<N?M:N;
final int NN = M<N?N:M;
final int K = M+N;
final int k = m+n;
int delta;
int max;
if(k<MM){
delta = firstDown?(k%2==0?(n+1):(m+1)):(k%2==0?(m+1):(n+1));
max = k*(k+1)/2;
}else
if(k<NN){
max = MM*(MM-1)/2+(k-MM+1)*MM;
delta = firstDown?(k%2==0?(N>M?M-m:n+1):(N>M?m+1:N-n)):(k%2==0?(N>M?m+1:N-n):(N>M?M-m:n+1));
}else{
max = N*M-(K-k)*(K-k-1)/2;
delta = firstDown?(k%2==0?(M-m):(N-n)):(k%2==0?(N-n):(M-m));
}
return max + delta;
}
}

输出:
01 03 04 10 
02 05 09 11
06 08 12 18
07 13 17 19
14 16 20 23
15 21 22 24



01 02 06 07
03 05 08 14
04 09 13 15
10 12 16 21
11 17 20 22
18 19 23 24



01 03 04 10 11 18
02 05 09 12 17 19
06 08 13 16 20 23
07 14 15 21 22 24



01 02 06 07 14 15
03 05 08 13 16 21
04 09 12 17 20 22
10 11 18 19 23 24



01 02 06 07 15 16
03 05 08 14 17 26
04 09 13 18 25 27
10 12 19 24 28 33
11 20 23 29 32 34
21 22 30 31 35 36
...全文
216 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
南瓜饼 2010-10-29
  • 打赏
  • 举报
回复
学习了 真厉害呀 呵呵
  • 打赏
  • 举报
回复
Cody_Yu 2010-10-28
  • 打赏
  • 举报
回复
等我再次闲的无聊的时候再拿出来瞅瞅看,看是不是还看得懂
keeya0416 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]
这代码你能在一个月之后看懂么?
[/Quote]
同问
zhenge1020 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]
这代码你能在一个月之后看懂么?
[/Quote]
呵呵,一语中的
  • 打赏
  • 举报
回复
这代码你能在一个月之后看懂么?
hayuanjunbudilei 2010-10-28
  • 打赏
  • 举报
回复
LZ很不错啊,学习了
BearKin 2010-10-28
  • 打赏
  • 举报
回复
不过我保证几个月以后我都能看的懂 木哈哈~
BearKin 2010-10-28
  • 打赏
  • 举报
回复
我记得原来是在首页上出的C++的题 貌似你用Java做的 我也写了 不过可能要笨很多

package pitaya;

/**
*
* @author lv9
*
*/

public class NumberWeaving {
public static void main(String[] args) {
show(getArray(9));
}

public static void show(int[][] array) {
for (int i = 0; i < array.length; i++) {
for (int y = 0; y < array[i].length; y++) {
if (array[i][y] < 10) {
System.out.print("0");
}
System.out.print(array[i][y]);
System.out.print(" ");
}
System.out.println();
System.out.println();
}
}

public static int[][] getArray(final int dimension) {
int[][] array = new int[dimension][dimension];

int currentNumber = 1;

for (int x = 0; x < dimension; x++) {
for (int y = 0; y < x + 1; y++) {
if (x % 2 == 0) {
array[x - y][y] = currentNumber++;
} else {
array[y][x - y] = currentNumber++;
}
}
}

for (int x = dimension - 1; x > 0; x--) {
for (int y = 1; y <= x; y++) {
if (x % 2 == 0) {
array[y + dimension - x - 1][dimension - y] = currentNumber++;
} else {
array[dimension - y][y + dimension - x - 1] = currentNumber++;
}
}
}
return array;
}

}

eggno8 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]

这代码你能在一个月之后看懂么?
[/Quote]
呵呵
precious 2010-10-28
  • 打赏
  • 举报
回复
有意思,呵呵
茫茫大海 2010-10-28
  • 打赏
  • 举报
回复
        照是手机中的一项重要功能,目前常见的千元机中都包含数个相机模组,能够实现虚化照、美颜、广角照、夜景等功能。手机是一个拥有巨大销量的电子产品,因此成为图像处理算法的一个重要落地场景。很多AI公司聚焦于此,如虹软、旷视等;也有众多手机厂自研相关算法,如OPPO、VIVO、小米等。        因此如上述的一些算法供应商或者手机OEM厂商,都会发布图像算法工程师的岗位,其薪酬具有相当的竞争力;同时也会要求对算法有一定的项目经验,能够根据市场需求开发相关的图像处理算法。        基于上述背景,本课程聚焦于广角算法领域,主要内容围绕着广角相机算法的开发而展开。相比于普通相机模组广角相机模组具有更大的FOV,手机中用于摄具有更大视野需求的风景、建筑、合照等。 但广角相机成像原图中存在着畸变,一般需要进行相关处理以得到更符合人眼观察习惯的结果图像。        课程内容组成如下,包括相机成像模型、相机标定、畸变校正、图像插值等众多知识点;同时提供教学资料和学习源码,源码下载地址位于教学PPT第二讲中。        通过该课程的学习,你将了解从零开始开发广角相机算法的过程,并通过项目实战掌握其中涉及的各个图像处理领域的知识点。这里使用Windows平台,基于VS2015与OpenCV3.4.6版本进行代码开发,对学习者相对更容易上手与代码调试。学习过程中若遇到问题可通过学习网站交流通道提问,作者将尽力及时解答。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧