蛇形矩阵的实现

通过java实现两种不同的蛇形矩阵。

之前在一个面试题上看到了一个关于写出一个蛇形矩阵的问题,当时很是纠结,后来分析了一下之后,就觉的问题不是那么的难了。
目前我见过的蛇形矩阵的考法有两种,一种是对角线式的蛇形矩阵,另一种是回旋绕的蛇形矩阵:
**1 3   4   10**
**2 5   9** 11
**6 8** 12  15
**7**   13  14  16
对于对角线的类型来说,是比较简单的。
1.首先我们可以观察数字从小到大的变化,会发现其实角标的变化分别是。
0 0   0 1   0 2     0 3
1 0   1 1   1 2     1 3
2 0   2 1   2 2     2 3
3 0   3 1   3 2     3 3
    就会发现前一个角标的变化规律是0 |1,0| 2,1,0 |3,2,1,0|
      后一个角标的变化是    0 |0,1|0,1,2|0,1,2,3|
      这个时候,在蛇转换方向的是时候,我们还需要调整一下递增和递减的关系!!!
      于是,规律就来了。我们可以先写出一个三角形,然后在写另一个三角形,是不是就会容易的很多!!!
boolean flag=ture;//定义了一个标志位。
for(int e=0;e<arr.length ;e++){
            if(flag){
                for(int c = e,d=0;c>=0 && d<=e;c--,d++){
                //两个角标的数字封边递增和递减
                    arr[c][d] = k++;
                }
                flag = !flag;//调整方向后,更改角标用来实现反方向的数值增加过程!
            }else{
                for(int c = e,d=0;c>=0 && d<=e;c--,d++){
                    arr[d][c] = k++;
                }
                flag = !flag;
            }
于是我们就能够实现以个三角形的矩阵了!!
**1 3   4   10**
**2 5   9** 0
**6 8** 0   0
**7**   0   0   0
那么,另一个三角形用和上面相反的思路就可以了!!!
下面是完整的程序的代码:
package samsung.kangjian.test;
 /**
  * 蛇形矩阵
  * @author JianKang
  *
  */
public class SnakeArray {
    static boolean flag = true;
    static int k = 1;
    public static void main(String[] args){
        snake1(4);
    }
    public static void snake1(int x){
        int arr[][] = new int[x][x];
        //正三角形的输入
        for(int e=0;e<arr.length ;e++){
            if(flag){
                for(int c = e,d=0;c>=0 && d<=e;c--,d++){
                    arr[c][d] = k++;
                }
                flag = !flag;
            }else{
                for(int c = e,d=0;c>=0 && d<=e;c--,d++){
                    arr[d][c] = k++;
                }
                flag = !flag;
            }
        }
        //倒三角形的输入。
        for(int g = 1;g<arr.length;g++){
            if(flag){
                for(int h = g,i=arr.length-1;h<arr.length && i>0;h++,i--){
                    arr[i][h] = k++;
                }
                flag= !flag;
            }else{
                for(int h = g,i=arr.length-1;h<arr.length && i>0;h++,i--){
                    arr[h][i] = k++;
                }
                flag= !flag;
            }
        }
        for(int a = 0;a<arr.length;a++){
            for(int b=0;b<arr.length;b++){
                System.out.print(arr[b][a]+"    ");
            }
            System.out.println("");
        }
    }
}
时间: 2024-08-01 07:23:42

蛇形矩阵的实现的相关文章

蛇形矩阵

如上图所示,是一个4*4的蛇形矩阵 算法思路 由图可观察到该矩阵可分为上三角和下三角.每个三角要根据蛇形的奇偶行进行计数. 算法代码 #include <stdio.h> int main() { int a[10][10]; int n; printf("Input n:"); scanf("%d",&n); int i=0,j=0,k=0; int count=1; for(i=0;i<n;i++)/*上三角 i代表是蛇形的奇偶行*/

随便写的蛇形矩阵

[问题描述] 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. [要求] [数据输入]本题有多组数据,每组数据由一个正整数N组成.(N不大于100) [数据输出]对于每一组数据,输出一个N行的蛇形矩阵.两组输出之间不要额外的空行.矩阵三角中同一行的数字用一个空格分开.行尾不要多余的空格. [样例输入] 5 [样例输出] 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 /*作者:Yosha*/ #include "stdio.h" int main() {

(水题)蛇形矩阵

1160 蛇形矩阵 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为

Java编码 蛇形矩阵的构建与遍历输出

一.蛇形矩阵的构建,并按行输出 例: 输入:n, 生成n*n的蛇形矩阵 1 2 3 8 9 4 7 6 5 输出:1 2 3 8 9 4 7 6 5 java编码 public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n = in.nextInt(); if(n < 0) return; if(n == 1){ Sys

蛇形矩阵与螺旋矩阵

自己写的蛇形矩阵:(蛇形矩阵就是在NXN矩阵格子上从左上到右下以"之"字型增加或减少,像蛇盘绕着的形状.本程序从左上开始盘旋一直到右下达到最大值) #include <iostream> using namespace std; #define n 10//输入要更改的矩阵大小 void main() { int a[n][n]={0},k=1,j=0,i=0,s1[4]={0,1,2,3},t1[4]={1,1,2,2},m=0; for (int t=1;t<=n

1010: 蛇形矩阵

Description 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. Input 本题有多组数据,每组数据由一个正整数N组成.(N不大于100) Output 对于每一组数据,输出一个N行的蛇形矩阵.两组输出之间不要额外的空行.矩阵三角中同一行的数字用一个空格分开.行尾不要多余的空格. Sample Input 5 Sample Output 1 3 6 10 152 5 9 144 8 137 1211 <pre name="code" class="cp

华为OJ——蛇形矩阵

题目描述 题目说明 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 接口说明 原型 void GetResult(int Num, char * pResult); 输入参数: int Num:输入的正整数N 输出参数: int * pResult:指向存放蛇形矩阵的字符串指针 指针指向的内存区域保证有效 返回值: void 输入描述: 输入正整数N(N不大于100) 输出描述: 输出一个N

第3章第1节练习题1 蛇形矩阵

问题描述 蛇形矩阵即使用二维数组完成来回曲折的赋值,举例说明如下所示的形式即为蛇形数组. 算法思想 观察该二维数组,只是可以"人为"的发现它就像一条蛇的形状来回爬行,然而并没有什么卵用,不能明确的站在计算机的角度上来实现这个数组.于是将所有的下标列出来便可以得到下述所述的曲线走势. 然后结合第一张图便可以发现 数字从2~3的过程中,下标行变化范围是0~1:下标列范围是1~0: 数字从4~6的过程中,下标行变化范围是2~0:下标列范围是0~2: 数字从7~10的过程中,下标行变化范围是0

ACM编程比赛入门题目之蛇形矩阵

蛇行矩阵 [问题描述] 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. [要求] [数据输入]本题有多组数据,每组数据由一个正整数N组成.(N不大于100) [数据输出]对于每一组数据,输出一个N行的蛇形矩阵.两组输出之间不要额外的空行.矩阵三角中同一行的数字用一个空格分开.行尾不要多余的空格. [样例输入] 5 [样例输出] 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 代码: #include <iostream> using namespace std

顺时针蛇形矩阵

#include <stdio.h> int main() { int i=0,j=0; int m[10][10]={0},s=1; int a,b,c,d,parity,k,n,center; printf("输入蛇形矩阵的n:"); scanf("%d",&n); parity=n%2;//检测n的奇偶性; center=n/2; for(k=(n+1)/2;k>0;k--) { for(a=0;a<2*k-1-parity;a