A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 黄玉昆 于 2013-5-2 15:40 编辑

下面的一道题是我给刘胜寒出的一道题,大家也可以参与做一做啊,有惊喜哦
这道题是给敢于挑战,敢于挖掘自己潜力的人出的,如果谁觉得能在规定时间做出来,敢于挑战我的题目,那么你就是厉害的,我就是佩服你的。
如果你觉得自己还不敢挑战,没关系,以后还有机会,不敢挑战的或者认为自己还差点的,那么就不要回复了。
另外,我会根据回复的时间,来评分的,回复越快,答案越清晰,分数当然越高了。


如果来挑战了,大家直接在本楼层编辑即可,不会编辑的请看帖:http://bbs.itheima.com/thread-42978-1-1.html,可以看其中的沙发层的“编辑贴”说明

规定时间:48小时,即从2013.4.30-5.2的9:00

注:如果你是真正的黑马,敢挑战,就要完完全全自己做出来,如果是从网上当的,那么算了吧,我鄙视这样的人,这样的人给黑马丢人,更丢自己的人。
不过我相信大家都是好样的,有能力自己做出来。

话不多说,看题(回复可见哦):
游客,如果您要查看本帖隐藏内容请回复


我把相对比较好的传上来,大家可以看一看啊(排名不分先后)
曹睿翔.zip (1.19 KB, 下载次数: 61)
蓝色骨头.zip (1.48 KB, 下载次数: 40)
丘凤光.zip (1.08 KB, 下载次数: 44)
李罡.zip (1.4 KB, 下载次数: 39)

161 个回复

正序浏览
过时间了.
回复 使用道具 举报
先看看阿!!
回复 使用道具 举报
gjggw123 来自手机 中级黑马 2013-5-2 09:34:17
159#
什么了?定
回复 使用道具 举报
不要太难 哦 亲!
回复 使用道具 举报
看下是什么内容
回复 使用道具 举报
是什么好玩的
回复 使用道具 举报
小生,挑战一下。
回复 使用道具 举报
  1. package com.itheima;

  2. public class Test {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 String[][] heilx = helix2DArray(5);
  9.                
  10.                 for(int i=0;i<heilx.length;i++){
  11.                         for(int j=0;j<heilx.length;j++){
  12.                                 System.out.print(heilx[i][j]+" ");
  13.                         }
  14.                         System.out.println();
  15.                 }
  16.         }
  17.        
  18.         //定义一个螺旋二维数组
  19.         public static String[][] helix2DArray(int size){
  20.                 //数组的大小就是数字的前后各加1
  21.                 int len = size + 2;
  22.                 String[][] heilx = new String[len][len];
  23.                 //遍历数组
  24.                 for(int x=0;x<len;x++){
  25.                         for(int y=0;y<len;y++){
  26.                                 //凡是第一行和最后一行都是*号
  27.                                 if(x==0||x==len-1){
  28.                                         heilx[x][y] = "*\t";
  29.                                 }
  30.                                 //凡是第一列和最后一列都是*号
  31.                                 if(y==0||y==len-1){
  32.                                         heilx[x][y] = "*\t";
  33.                                 }
  34.                         }
  35.                 }
  36.                 /*
  37.                           * * * *  
  38.                         * 1 2 *
  39.                         * 4 3 *
  40.                         * * * *
  41.                        
  42.                         找规律:如果 size是双数 则从 len/2-1开始,否则 len/2
  43.                                         循环size次,分别x和y的变化是: 第一次 y++ 第二次 x++ 第三次 y-- y-- 第四次 x-- x-- 以此类推
  44.                                         有点类似于         y: 1  34   789      131415
  45.                                                                  x:  2    56   101112
  46.                  */
  47.                 if(size%2==0){
  48.                         heilxNumber(heilx, len/2-1, len/2-1, size);
  49.                 }else{
  50.                         heilxNumber(heilx, len/2, len/2, size);
  51.                 }
  52.                 return heilx;
  53.         }
  54.        
  55.         private static void heilxNumber(String[][] heilx,int x,int y,int size){
  56.                
  57.                 //定义让y循环多少次
  58.                 int a = 1;
  59.                 //定义让x循环多少次
  60.                 int b = 1;
  61.                 //定义一个判断y或x是该++还是该--
  62.                 int temp = 1;
  63.                 //存入螺旋数值
  64.                 int h = 1;
  65.                 heilx[x][y] = temp+"";
  66.                 while(temp<=size){
  67.                         for(int i=0;i<a;i++){
  68.                                 if(temp%2==0){
  69.                                         heilx[x][y] = h+"\t";
  70.                                         h++;
  71.                                         y--;
  72.                                        
  73.                                 }else{
  74.                                         heilx[x][y] = h+"\t";
  75.                                         h++;
  76.                                         y++;
  77.                                 }
  78.                         }
  79.                         if(temp<size){
  80.                                 for(int j=0;j<b;j++){
  81.                                         if(temp%2==0){
  82.                                                 heilx[x][y] = h+"\t";
  83.                                                 h++;
  84.                                                 x--;
  85.                                                
  86.                                         }else{
  87.                                                 heilx[x][y] = h+"\t";
  88.                                                 h++;
  89.                                                 x++;
  90.                                         }
  91.                                 }
  92.                         }
  93.                         a++;
  94.                         b++;
  95.                         temp++;
  96.                 }
  97.         }
  98. }
复制代码

评分

参与人数 1技术分 +3 收起 理由
黄玉昆 + 3

查看全部评分

回复 使用道具 举报
  1. /*
  2. 个人感觉,我的这个方法让人有点晕。。。
  3. 1 先将四周的星号放入二维数组中
  4. 2 将左上半部分的数字放入
  5. (1)求出奇数的平方以及在二维数组的位置
  6. (2)根据(1)的值以及下标向左推
  7. (3)根据最左侧数据的信息再向下推
  8. 3 然后用同样的方法,推出右下部分的数据
  9. */
  10. class Circle{
  11.         public static void main(String[] args){
  12.                 int n =4;
  13.                 System.out.println("输入的数n = "+n);
  14.                
  15.                 int m = n+2;//二维数组的维数
  16.                 int[][] arr_2 = new int[m][m];
  17.                
  18.                 twoArr(arr_2);
  19.                 printArr(arr_2);       
  20.                 }
  21. //给二维数组按要求赋值               
  22.         public static void twoArr(int[][] b){
  23.                 int m = b.length;//图形整体的边长
  24.                 int n = m-2;//输出图形中,数字的边长
  25.                 for(int i = 0; i < m; i++){//输入外围星号
  26.                         for(int j = 0; j<m; j++){
  27.                                 if(i == 0||i==(m-1)||j==0||j==(m-1))
  28.                                         b[i][j] = '*';
  29.                                 }
  30.                         }
  31.                        
  32.                 int p = (n+1)/2;//中间数1的下标
  33.                 b[p][p] = 1;

  34.                 for(int i = 1; i <= p;i++){
  35.                         int k,left=0,right = 0;
  36.                         if(b[p-i][p+i] !='*'){
  37.                                 b[p-i][p+i] =(2*i+1)*(2*i+1); //  3   5...奇数的平方
  38.                                
  39.                                 for(k=1;k<((2*i)+1);k++){    //奇数平方的左侧数据
  40.                                         b[p-i][p+i-k] = b[p-i][p+i]-k;
  41.                                         left = b[p-i][p+i-k];//最左侧数据
  42.                                         }       
  43.                                                
  44.                                 for(int h=1;h<((2*i)+1);h++)//转而再向下
  45.                                         b[p-i+h][p+i-(k-1)] = left - h;//用上面推出的最左侧数据的下标,但是这里的k要记得减1
  46.                                
  47.                                 }
  48.                         if(b[p+i][p-i+1]!='*'){
  49.                                 b[p+i][p-i+1]=(2*i)*(2*i);    //   2  4  6...偶数的平方
  50.                                
  51.                                 for(k = 1;k<2*i;k++){                //偶数平方的右侧数据
  52.                                         b[p+i][p-i+1+k] = b[p+i][p-i+1]-k;
  53.                                         right = b[p+i][p-i+1+k];   //最右侧数据
  54.                                         }
  55.                                
  56.                                 for(int h = 1;h<2*i;h++)//转而再向上
  57.                                         b[p+i-h][p-i+1+(k-1)] = right-h;  
  58.                                
  59.                                 }
  60.                         }
  61.                
  62.                 }
  63. //输出二维数组
  64.         public static void printArr(int[][] b){
  65.                 for(int i = 0; i < b.length; i++){
  66.                         for(int j = 0; j<b.length; j++){
  67.                                 if(b[i][j]=='*')
  68.                                            System.out.print((char)b[i][j]+"\t");
  69.                                 else System.out.print(b[i][j]+"\t");
  70.                                 }
  71.                         System.out.println();
  72.                         }
  73.                 System.out.println();
  74.                 }
  75.         }
复制代码

评分

参与人数 1技术分 +3 收起 理由
黄玉昆 + 3

查看全部评分

回复 使用道具 举报
来看看。。
回复 使用道具 举报
看看题,试试看
回复 使用道具 举报
来看看那
回复 使用道具 举报
看看看看
回复 使用道具 举报
看看看看!
回复 使用道具 举报
看看题目
回复 使用道具 举报
挑战一下
回复 使用道具 举报
来看看题
回复 使用道具 举报
呵呵,看看
回复 使用道具 举报
看看是什么
回复 使用道具 举报
看看,还要凑齐是个才行能够给看的撒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马