腾讯2016实习生编程题 打印蛇形二维数组

当时腾讯测评笔试的时候没有写出来,今天想想把这玩意给弄出来,想思路包括写程序大概用了20分钟,接着调试程序用了接近30分钟

根据这些情况,恩,给自己打75分。  调试过程中出现的异常主要是数组下标越界  就是循环过程,在边界条件下,中数组下标没有处理好

下面是我的code

package test1;
/*
 * 输入一个整数 输出一个矩阵
 * 例子 整数等于3
 * 矩阵为    1 2 3
 *          8 9 4
 *          7 6 5 *输出为 1 2 3 8 9 4 7 6 5
 * 思路:首先确定有多少圈  就有多少个循环
 *      定义circle 记录圈数
 *      定义count记录每次移动的递增数 从1 到N*N
 *      每个循环中根据arr二维数组的横纵坐标 使得顺时针旋转,每移动一次,count++
 */
public class SnakeMatrix {

    public static void main(String[] args) {
        SnakeMatrix.matrix(4);
    }
    public static void matrix(int num){
        if(num<=0)
            return;
        int circle = 0;
        if(num%2==0)
            circle=num>>1;
        else
            circle=(num>>1)+1;
        int col,row;
        int arr[][] = new int[num][num];
        int count=1;
        for(int i=0;i<circle;i++){
            row=i;
            col=i;
            while(col<num-i){
            arr[row][col++]=count++;
            }
            col--;
            row++;
            while(row<num-i){
                arr[row++][col]=count++;
                }
            row--;
            col--;
            while(col>=i){
                arr[row][col--]=count++;
                }
            col++;
            row--;
            while(row>i){
                arr[row--][col]=count++;
                }
        }
        for(int i=0;i<num;i++){
            for(int j=0;j<num;j++){
                System.out.print(arr[i][j]+" ");
            }
        }

    }

}

个人感觉代码的亮点有

1 如何实现顺时针循环遍历,到了每个角上如何转变方向

2 转变方向后数组下标的处理

时间: 2024-11-05 06:27:12

腾讯2016实习生编程题 打印蛇形二维数组的相关文章

编程题:指向二维数组元素的指针变量。功能:已知二维数组a[2][3],输入输出全部元素。

#include<stdio.h> void main() { int a[2][3],i,j; int *p; /*用坐标法输入二维数组元素*/ for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); /*用指针法输出二维数组元素*/ p=a[0];         /*等价于p&a[0][0];*/ for(;p<a[0]+6;p++)   printf("%4d&quo

面试题:打印蛇形二维数组

如何这样打印一个数组: 01 02 03 04 0516 17 18 19 0615 24 25 20 0714 23 22 21 0813 12 11 10 09 我的一个解答: static void Main(string[] args) { var m = 5; var matrix = new int[m, m]; var row = 0; var col = 0; matrix[row, col] = 1; var moveVertically = false; if (m <= 0

编程题:用二维字符串数组实现。从键盘输入三个学生姓名,并输出。

#include<stdio.h> #include<string.h> void main() { char name[3][30]; int i; for(i=0;i<3;i++) gets(name[i]);  /*name[i]是一个一维字符数组*/ for(i=0;i<3;i++) printf("%s\n",name[i]); } 编程题:用二维字符串数组实现.从键盘输入三个学生姓名,并输出.,布布扣,bubuko.com

2016年10月13日--二维数组、多维数组、推箱子

数组:相同数据类型的元素按照一定的顺序进行排列的 二维数组 int[,] array = new int[3, 2]; int[,] array = new int[3, 4] { { 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; int[,] array = new int[3, 4] {{ 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; [3, 2]   3表示有三个一维数组 [3, 2]   

腾讯2016校招编程题【PHP实现】

2016腾讯春招的编程题 话不多说,直接上题!!! 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数 . 这道题是以回文为载体,考察两个字符间的最大子串,最大子串算法在表示字符串的关联度上用途很广泛. 而遮到题就是字符串的长度减去其和翻转字符串的长度的最大子串即可.最长子串的算法我一开始也是蒙的.这完全没没思路呀. 后来看到一篇blog,才明白最长子串,好的,最后我们形成代码 代码实现: function solution

剑指offer-顺时针打印矩阵-二维数组

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1     2  3    4 5     6  7    8 9   10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. import java.util.ArrayList; public class Solution { public static ArrayList<Integer> printMatrix(int

模拟水题,查看二维数组是否有一列都为1(POJ2864)

题目链接:http://poj.org/problem?id=2864 题意:参照题目 哈哈哈,这个题discuss有翻译哦.水到我不想交了. #include <cstdio> #include <cstdlib> #include <cstring> int arr[510][110]; int main(void) { int r, c; int i, j; int flag; while(scanf("%d%d", &c, &

2016/1/10 作业 1, 二维数组遍历输出求和 2,转置运算???? 3,九宫格?? 后两个存在问题

1 public class arr1 { 2 3 4 public static void main(String[] args) { 5 // 创建二维数组arr[][],输出二维数组所有元素的和. 6 7 int arr[][]={{1,3,5,7,9},{21,23,25,27,29}, 8 {12,14,16,18},{32,34,36,38}}; 9 int sum=0; 10 System.out.println("二维数组遍历"); 11 // for循环 遍历 求和

二维数组环形打印,亲自调试

/*先把数据按照打印格式打印到二维数组中,然后输出二维数组即可 *时间复杂度 O(N*M) *空间复杂度O(N*M) */ #include<stdio.h> #include<string.h> #include<stdlib.h> int input(void); void contral(int **arry,int col,int row); void set_value(int**a,int col,int row, int start); void prin