代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
蛇形矩阵的原理
作者:
Yvette
/ 发布于
2015/7/20
/
1092
import java.util.*; public class Snake { int n; public Snake(int n){ this.n=n; } public void print(){ int [][] data =new int [n][n]; data [0][0]=1; data [n-1][n-1]=n*n; //将蛇形矩阵按照正对角线分为上半部分和下半部分 //现在先来设计上半部分,并且负责对角线,上半部分可将斜线的顺序记为k,按k的奇偶性进行判断 for (int k = 1; k <=(n-1); k++) { if (k%2==1){//当k为奇数时,代表每条斜线的最小值在上方 data[0][k]=1+k*(k+1)/2; for (int i = 1; i <= k; i++) { data[i][k-i]=data[0][k]+i;//行递增,列递减 } }else{//当k为偶数时,代表每条斜线的最小值在下方 data[k][0]=1+k*(k+1)/2; for (int i = 0; i <=k; i++) { data[k-i][i] =data[k][0]+i; //行递减,列递增 } } }//上半部分就已经设计好了,接着设计下半部分 //下半部分就会显得比较复杂,首先要先判断n的奇偶性,还要再判断k的奇偶性 //从左向右按照从大到小的顺序进行斜线的连接,同样以k代表斜线的序号 if(n%2==0){//如果n为偶数 for(int k=1;k<=(n-2);k++){ if(k%2==1){//当k为奇数的时候每条斜线的最大值在上方 data[k][n-1]= data[n-1][n-1] - (n - k - 1) * (n - k)/2; for(int i=1;i<n-k;i++){ data[k+i][n-1-i]=data[k][n-1]-i;//行递增,列递减 } }else{//当k为偶数的时候,每条斜线的最大值在下方 data[n-1][k]=data[n-1][n-1]-(n-k-1)*(n-k)/2; for(int i=1;i<n-k;i++){ data[n-1-i][k+i]=data[n-1][k]-i;//行递减,列递增 } } } }else{//如果n为奇数,那么就是相反的 for(int k=1;k<=(n-2);k++){ if(k%2==0){//当k为偶数的时候每条斜线的最大值在上方 data[k][n-1]= data[n-1][n-1] - (n - k - 1) * (n - k)/2; for(int i=1;i<n-k;i++){ data[k+i][n-1-i]=data[k][n-1]-i;//行递增,列递减 } }else{//当k为奇数的时候,每条斜线的最大值在下方 data[n-1][k]=data[n-1][n-1]-(n-k-1)*(n-k)/2; for(int i=1;i<n-k;i++){ data[n-1-i][k+i]=data[n-1][k]-i;//行递减,列递增 } } } }//下半部分的就设计好咯 //接下来就是显示矩阵咯 for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ System.out.print(data[i][j]+"\t"); } System.out.println(); }//结束显示,结束print方法,进入main方法 }//结束构造方法 public static void main(String[] args) { for(int i=1;i<4;i++){ Scanner scanner =new Scanner(System.in); System.out.println("请输入蛇形矩阵的阶数:"); int number =scanner.nextInt(); Snake snake=new Snake(number); snake.print(); } } } Snake.java package Exercise; import java.util.*; public class Snake { int n; public Snake(int n){ this.n=n; } public void print(){ int [][] data =new int [n][n]; data [0][0]=1; data [n-1][n-1]=n*n; //将蛇形矩阵按照正对角线分为上半部分和下半部分 //现在先来设计上半部分,并且负责对角线,上半部分可将斜线的顺序记为k,按k的奇偶性进行判断 for (int k = 1; k <=(n-1); k++) { if (k%2==1){//当k为奇数时,代表每条斜线的最小值在上方 data[0][k]=1+k*(k+1)/2; for (int i = 1; i <= k; i++) { data[i][k-i]=data[0][k]+i;//行递增,列递减 } }else{//当k为偶数时,代表每条斜线的最小值在下方 data[k][0]=1+k*(k+1)/2; for (int i = 0; i <=k; i++) { data[k-i][i] =data[k][0]+i; //行递减,列递增 } } }//上半部分就已经设计好了,接着设计下半部分 //下半部分就会显得比较复杂,首先要先判断n的奇偶性,还要再判断k的奇偶性 //从左向右按照从大到小的顺序进行斜线的连接,同样以k代表斜线的序号 if(n%2==0){//如果n为偶数 for(int k=1;k<=(n-2);k++){ if(k%2==1){//当k为奇数的时候每条斜线的最大值在上方 data[k][n-1]= data[n-1][n-1] - (n - k - 1) * (n - k)/2; for(int i=1;i<n-k;i++){ data[k+i][n-1-i]=data[k][n-1]-i;//行递增,列递减 } }else{//当k为偶数的时候,每条斜线的最大值在下方 data[n-1][k]=data[n-1][n-1]-(n-k-1)*(n-k)/2; for(int i=1;i<n-k;i++){ data[n-1-i][k+i]=data[n-1][k]-i;//行递减,列递增 } } } }else{//如果n为奇数,那么就是相反的 for(int k=1;k<=(n-2);k++){ if(k%2==0){//当k为偶数的时候每条斜线的最大值在上方 data[k][n-1]= data[n-1][n-1] - (n - k - 1) * (n - k)/2; for(int i=1;i<n-k;i++){ data[k+i][n-1-i]=data[k][n-1]-i;//行递增,列递减 } }else{//当k为奇数的时候,每条斜线的最大值在下方 data[n-1][k]=data[n-1][n-1]-(n-k-1)*(n-k)/2; for(int i=1;i<n-k;i++){ data[n-1-i][k+i]=data[n-1][k]-i;//行递减,列递增 } } } }//下半部分的就设计好咯 //接下来就是显示矩阵咯 for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ System.out.print(data[i][j]+"\t"); } System.out.println(); }//结束显示,结束print方法,进入main方法 }//结束构造方法 public static void main(String[] args) { for(int i=1;i<4;i++){ Scanner scanner =new Scanner(System.in); System.out.println("请输入蛇形矩阵的阶数:"); int number =scanner.nextInt(); Snake snake=new Snake(number); snake.print(); } } }
试试其它关键字
蛇形矩阵
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Yvette
贡献的其它代码
(
20
)
.
计算文档每行出现的数字个数,并计算整个文档的数字总
.
去除input和textarea点击选中框,只能输入数字
.
获取昨天日期、今天日期、明天日期以及前一个小时和后
.
返回字符串A从start位置到结尾的字符串
.
不使用第三个变量完成两个整数的交换
.
获取本机内网和外网IP
.
遍历子目录文件
.
获取工程目录
.
自定义导航栏按钮(左侧)
.
上传文件
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3