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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李跃达 中级黑马   /  2013-1-26 21:59  /  1523 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-30 10:31 编辑

有一道题,从键盘上接受一个数字,比如输入的是5,则输出:
1   2   3   4   5
12 13  14 6
11 15  7
10 8
9

6 个回复

倒序浏览
谢毅 来自手机 中级黑马 2013-1-27 11:11:18
沙发
这题有意思,不过我用手机上的^_^,坐看回复
回复 使用道具 举报
做过螺旋数组,这个3角的还真做过
回复 使用道具 举报
本帖最后由 焦健 于 2013-1-27 17:06 编辑
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;

  3. public class Yuan {

  4.         /**有一道题,从键盘上接受一个数字,比如输入的是5,则输出:
  5.         1   2   3   4   5
  6.         12 13  14 6
  7.         11 15  7
  8.         10 8
  9.         9
  10.          * @param args
  11.          */
  12.         public static void main(String[] args) {
  13.                 // TODO Auto-generated method stub
  14.                 BufferedReader bufr=null;
  15.                 try{
  16.                         bufr=new BufferedReader(new InputStreamReader(System.in));
  17.                         String str=null;
  18.                         str=bufr.readLine();//读一行数据
  19.                         show(Integer.parseInt(str));//将数据转换为int参数传递进去
  20.                        
  21.                 }catch(Exception e){
  22.                         throw new RuntimeException("失败");
  23.                 }finally{
  24.                         try{
  25.                                 if(bufr!=null){
  26.                                         bufr.close();
  27.                                 }
  28.                         }catch(Exception e){
  29.                                 throw new RuntimeException("失败");
  30.                         }
  31.                 }
  32.         }
  33.         public static void show(int value){
  34.                 int[][] arr=new int[value][value];
  35.                 int i=0,j=0;//数组的角标
  36.                 for(int x=1,y=value;arr[i][j+1]==0||arr[i+1][j-1]==0||arr[i-1][j]==0;){
  37.                         if(arr[i][j+1]==0){
  38.                                 if(x==1)j--;
  39.                                 for(int a=0;a<y;a++){
  40.                                         arr[i][++j]=x++;               
  41.                                 }
  42.                                 y--;
  43.                         }
  44.                         if(arr[i+1][j-1]==0){
  45.                                 for(int a=0;a<y;a++){
  46.                                         arr[++i][--j]=x++;
  47.                                 }
  48.                                 y--;
  49.                         }
  50.                         if(arr[i-1][j]==0){
  51.                                 for(int a=0;a<y;a++){
  52.                                         arr[--i][j]=x++;
  53.                                 }
  54.                                 y--;
  55.                         }
  56.                 }//遍历打印数组
  57.                 for(int p=0,a=0; p<value; p++){  
  58.                         for(int q = 0; q<value; q++){  
  59.                                 if((a=arr[p][q])!=0)
  60.                                         if(a<10)
  61.                                                 System.out.print(a+"  ");
  62.                                         else
  63.                                                 System.out.print(a+" ");
  64.                         }  
  65.                         System.out.println();  
  66.                 }
  67.         }
  68. }
复制代码
这样做就可以实现这个功能了。。对数组操作是一个单独的方法,便于复用。。

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

回复 使用道具 举报
楼上的 我试了一下 你这复用不了啊
回复 使用道具 举报
王文正 发表于 2013-1-27 17:55
楼上的 我试了一下 你这复用不了啊

可以的啊。。
回复 使用道具 举报
我也来个,只是研究算法,代码比较乱:

class Luoxuan{

public static void main(String[] args)
{

   int[][] arr=new int[50][50];//这个数组的长度根据自己需要设定,越大越好。
        
        
        
        int k=20;//这是要输入的数字
        int n=0,m=k-1,z=k-1,t=1;
        int i=0,j=0;
        
        arr[0][0]=1;
        while(n<k/2+1)//递归循环,每循环一次由外向里将三角形边上的数字装到数组里。里面的判断条件是我自己琢磨了定的,
        {   
               
                i=n;
                for(j=n;j<m;j++)//获取横向边的数字
                {        if(arr[j]==0)
                                arr[j]=++t;        
                }
                while(j>=n)//获取斜向边的数字
                {
                        
                        if(arr[j]==0)
                                arr[j]=++t;
                        j--;
                        i++;
                }
                for(i=z;i>n;i--)//获取竖向边的数字
                {        if(arr[n]==0)
                                arr[n]=++t;
                }
               
                m-=2;
                z-=2;
               
                n++;
        }
        
        for(i=0;i<=k-1;i++)//输出螺旋数字
                {
                        for(j=0;j<=k-1-i;j++)
                                {        if(arr[j]>=100)
                                         
                                System.out.print(arr[j]+" ");//空格是为了输出数字对齐,三位数都可以对齐,再多就得添加判断了,下面同理。
                                                   else
                                                     if(arr[j]>=10&&arr[j]<100)
                                                               
                                                System.out.print(arr[j]+"  ");
                                                                else
                                                               
                                                                System.out.print(arr[j]+"   ");
                                       
                                }
                                
                                System.out.println();
                }        



}

}

求技术分,版主……

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马