趣味算法

来源:互联网 发布:淘宝宝贝拍照 编辑:程序博客网 时间:2024/04/30 07:57

 

1234
5678
90ab
cdef
要求输出12348bfedc9567a0
考虑一个蚂蚁,它当前坐标x,y,它的运动方向,4个。每次撞到墙,右转,当前状态下的4面墙...........
 
  1. public class TEST2 
  2. {
  3.     public static void main(String[] args) {
  4.         char[][] all = {
  5.                 {'1','2','3','4'},
  6.                 {'5','6','7','8'},
  7.                 {'9','0','a','b'},
  8.                 {'c','d','e','f'},
  9.             };
  10.         StringBuffer result = new StringBuffer();   
  11.         int sept = 1;   //蚂蚁的移动方向,右和下是1,左和上是-1
  12.         int x = 0;      //蚂蚁的坐标
  13.         int y = 0;      //蚂蚁的坐标
  14.         int xMax = all[0].length;//蚂蚁的移动范围
  15.         int xMin = 0;           //蚂蚁的移动范围
  16.         int yMax = all.length;  //蚂蚁的移动范围
  17.         int yMin = 0;           //蚂蚁的移动范围
  18.         boolean isRow = true;   //横向还是纵向移动
  19.         
  20.         for(int i=0; i<all[0].length*all.length; i++){
  21.             if(isRow){
  22.                 result.append(all[y][x]);
  23.                 if(x+sept < xMax && x+sept >= xMin){    //在横向范围内则x坐标+或-1                
  24.                     x += sept;
  25.                 }else{
  26.                     if(sept == 1){  //否则纵坐标+或-1
  27.                         yMin += 1;
  28.                     }else{
  29.                         yMax -= 1;
  30.                     }
  31.                     y += sept;      //避免角上的重复走
  32.                     isRow = false;  //变向
  33.                 }
  34.             }else{
  35.                 result.append(all[y][x]);
  36.                 if(y+sept < yMax && y+sept >= yMin){                    
  37.                     y += sept;
  38.                 }else{
  39.                     if(sept == 1){
  40.                         xMax -= 1;
  41.                     }else{
  42.                         xMin += 1;
  43.                     }                   
  44.                     isRow = true;
  45.                     sept = -sept;
  46.                     x += sept;
  47.                 }
  48.             }           
  49.         }
  50.         System.out.println(result.toString());
  51.     }
  52. }

 

或者

 

 

  1. public class TEST2 
  2. {
  3.      public static void main(String[] args) {
  4.             char[][] chars = {
  5.                     {'1','2','3','4'},
  6.                     {'5','6','7','8'},
  7.                     {'9','0','a','b'},
  8.                     {'c','d','e','f'}};
  9.             int columnNum = chars[0].length;
  10.             int rowNum = chars.length;
  11.             printCharArray(rowNum, columnNum, chars);
  12.         }
  13.         private static void printCharArray(int rowNum, int columnNum, char[][] chars) {
  14.             //print the first row of given array 
  15.             for (int i = 0; i < columnNum; i++) {
  16.                 System.out.print(chars[0][i]);
  17.             }
  18.             //swap rows with columns of sub-array 
  19.             if (rowNum > 0 && columnNum > 0) {
  20.                 int newRowNum = columnNum;
  21.                 int newColumnNum = rowNum - 1;
  22.                 char[][] newChars = new char[newRowNum][newColumnNum];
  23.                 for (int i = 0; i < newRowNum; i++) {
  24.                     for (int j = 0; j < newColumnNum; j++) {
  25.                         newChars[i][j] = chars[j + 1][newRowNum - i - 1];
  26.                     }
  27.                 }
  28.                 //print the sub-array recursively 
  29.                 printCharArray(newRowNum, newColumnNum, newChars);
  30.             }
  31.         }
  32. }
原创粉丝点击