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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小石头39910 中级黑马   /  2013-5-8 18:01  /  2794 人查看  /  19 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石头39910 于 2013-5-10 09:40 编辑




详细如图:

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

19 个回复

倒序浏览
我去,你把蓝桥杯的最后一题搞过来.
回复 使用道具 举报
陈圳 发表于 2013-5-8 18:05
我去,你把蓝桥杯的最后一题搞过来.

对啊,我考了,不会,所以问问,嘿嘿,还请指教
回复 使用道具 举报
感觉好难啊{:soso_e100:}
回复 使用道具 举报
lipingan0520 发表于 2013-5-8 20:38
感觉好难啊

I think so!
回复 使用道具 举报
陈圳 发表于 2013-5-8 18:05
我去,你把蓝桥杯的最后一题搞过来.

你也去了蓝桥杯。。。。很坑的一个比赛。。。表示打死我我也不去了。。
回复 使用道具 举报
陈圳 发表于 2013-5-8 18:05
我去,你把蓝桥杯的最后一题搞过来.

你也去了蓝桥杯。。。。很坑的一个比赛。。。表示打死我我也不去了。。
回复 使用道具 举报
这题谁先做出来加分。。。目测2分起步。。。加油吧。
回复 使用道具 举报
刘胜寒 发表于 2013-5-8 21:23
你也去了蓝桥杯。。。。很坑的一个比赛。。。表示打死我我也不去了。。 ...

没有,上次找习题做,百度到的,反问一下.这是蓝桥杯是怎么比赛法,这道题差不多要做出来了.不过表示时间花的有点久,几个小时了.如果比赛时,这个进度,那就扯蛋了...
回复 使用道具 举报
陈圳 发表于 2013-5-8 21:27
没有,上次找习题做,百度到的,反问一下.这是蓝桥杯是怎么比赛法,这道题差不多要做出来了.不过表示时间花的 ...

一般一流学校鸟都不鸟的一个比赛....
二流三流的学校才会去的。。。
一个字坑.
回复 使用道具 举报
刘胜寒 发表于 2013-5-8 21:31
一般一流学校鸟都不鸟的一个比赛....
二流三流的学校才会去的。。。
一个字坑. ...

坑不坑无所谓,最主要自身有进步就好.学了总归是自己的嘛
回复 使用道具 举报
陈圳 发表于 2013-5-8 21:34
坑不坑无所谓,最主要自身有进步就好.学了总归是自己的嘛

你可以看一下报名的学校吗....
你就知道了。。
不过题目有些确实不错..
回复 使用道具 举报
本帖最后由 孙金鑫 于 2013-5-9 00:48 编辑

  1. //如果想自己输入数字,然后打印图形的话,也很简单,把下面的数据改一下就可以了,可以自己做做,挺有意思的
  2. class Test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //定义一个String类型的二维数组
  7.                 String[][] a = new String[21][21];

  8.                 //对二维数组进行赋值
  9.                 for(int i=0;i<21;i++)
  10.                 {
  11.                         for(int j=0;j<21;j++)
  12.                         {
  13.                                 a[i][j] = "  ";
  14.                         }
  15.                 }
  16.                

  17.                 //调用show方法,即下面自定义方法。
  18.                 show(a);
  19.                
  20.                
  21.                 //把数组中的元素,打印出来
  22.                 for(int i=0;i<21;i++)
  23.                 {
  24.                         for(int j=0;j<21;j++)
  25.                         {
  26.                                 System.out.print(a[i][j]);
  27.                         }
  28.                         System.out.println();
  29.                 }
  30.                
  31.         }


  32.         public static void show(String[][] a)
  33.         {                        
  34.                 for(int count = 0;count<7;count+=2)
  35.                 {
  36.                         
  37.                         //紧邻下面这个for循环是做的图形左上角,
  38.                         //即图形以横向和纵向中轴线为界,其中的四分之一,即是左上角。
  39.                         for(int i=0+count;i<11;i++)
  40.                                 for(int j=0+count;j<11;j++)
  41.                                 {
  42.                                         if(i==0+count && j>1+count)
  43.                                         {
  44.                                                 a[i][j] = "* ";
  45.                                         }
  46.                                         if(i==1+count && j==2+count)
  47.                                         {
  48.                                                 a[i][j] = "* ";
  49.                                         }
  50.                                         if(i==2+count && j<3+count)
  51.                                         {
  52.                                                 a[i][j] = "* ";
  53.                                         }
  54.                                         if(i>1+count && j==0+count)
  55.                                         {
  56.                                                 a[i][j] = "* ";
  57.                                         }
  58.                                 }



  59.                         //图形以横向和纵向中轴线为界,其中四分之一,即右上角。
  60.                         for(int i=0+count,x=0+count;i<11;i++,x++)
  61.                         {
  62.                                 for(int j=11,y=9;j<21-count;j++,y--)
  63.                                 {
  64.                                         a[i][j] = a[x][y];                                
  65.                                 }                        
  66.                                 
  67.                         }
  68.                         


  69.                         //图形以横向中轴线为界,即其中二分之一,整个下半部。
  70.                         for(int i=11,x=9;i<21;i++,x--)
  71.                         {
  72.                                 for(int j=0,y=0;j<21;j++,y++)
  73.                                 {
  74.                                         a[i][j]=a[x][y];
  75.                                 }
  76.                         }
  77.                
  78.                 //中间的十字架        
  79.                 for(int i=8;i<13;i++)
  80.                 {
  81.                         for(int j=8;j<13;j++)
  82.                         {
  83.                                 if(i == 10)
  84.                                         a[i][j] = "* ";
  85.                                 if(j == 10)
  86.                                         a[i][j] = "* ";
  87.                         }
  88.                 }

  89.         }
  90.         
  91.         }
  92. }
复制代码

1.jpg (22.65 KB, 下载次数: 0)

1.jpg

评分

参与人数 2技术分 +2 黑马币 +15 收起 理由
小石头39910 + 15 很给力!
Sword + 2 赞一个!

查看全部评分

回复 使用道具 举报
孙金鑫 发表于 2013-5-9 00:44

牛逼 不过楼主题目是不是有问题?输入1的时候一共输出9行 输入3的时候输出17行 而配彩色的图却是21行的。。。。
回复 使用道具 举报
本帖最后由 shenqi 于 2013-5-9 11:49 编辑
  1. package cn.itcast.itheima2;

  2. public class CrossTest {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 String[][] cross = getCross(2);
  9.                
  10.                 for(int i=0;i<cross.length;i++){
  11.                         
  12.                         for(int j=0;j<cross.length;j++){
  13.                                 System.out.print(cross[i][j]+"  ");
  14.                         }
  15.                         System.out.println();
  16.                         System.out.println();
  17.                         
  18.                 }
  19.         }
  20.         
  21.         public static String[][] getCross(int num){
  22.                
  23.                 if(num > 30 || num == 0)
  24.                         throw new IllegalArgumentException("无效的参数(0<num<30)");
  25.                 //数组的大小
  26.                 int size=9;
  27.                 //每次增长4
  28.                 int increase = 4;
  29.                 //生成二维数组的大小
  30.                 for(int i=1;i<num;i++){
  31.                         size +=increase;
  32.                 }
  33.                 //创建一个二维数组
  34.                 String[][] cross = new String[size][size];
  35.                 for(int i=0;i<cross.length;i++){
  36.                         for(int j=0;j<cross.length;j++){
  37.                                 cross[i][j] = " ";
  38.                         }
  39.                 }
  40.                
  41.                 //定义十字的初始位置
  42.                 int x = size/2-2;
  43.                 int y = size/2-2;

  44.                 //中间的十字 无论数组多大都是固定的大小
  45.                 for(int i=0;i<5;i++,x++,y++){
  46.                         cross[x][size/2] = "0";
  47.                         cross[size/2][y] = "0";
  48.                 }

  49.                 //初始化外边边界形状
  50.                 int w = size/2-4;
  51.                 int n = size/2-4;
  52.                
  53.                 int e = size/2+4;
  54.                 int s = size/2+4;
  55.                
  56.                
  57.                 //外边形状循环的次数
  58.                 for(int i=1,/*初始化转角*/corner=2,/*tmp控制里层循环次数*/tmp=2;i<=num;i++,tmp+=3,w-=2,n-=2,e+=2,s+=2){
  59.                         
  60.                         //边界
  61.                         border(w,1, tmp, cross);
  62.                         border(n,0, tmp, cross);
  63.                         border(e,1,tmp, cross);
  64.                         border(s,0,tmp, cross);
  65.                         
  66.                         //转角
  67.                         //左上角
  68.                         corner(cross, size/2-corner,size/2-corner,0);
  69.                         //右上角
  70.                         corner(cross, size/2-corner,size/2+corner,1);
  71.                         //右下角
  72.                         corner(cross, size/2+corner, size/2-corner,2);
  73.                         //左下角
  74.                         corner(cross, size/2+corner,size/2+corner,3);
  75.                         corner+=2;
  76.                 }
  77.                
  78.                 return cross;
  79.         }
  80.         
  81.         private static void border(int j,int flag,int control,String[][] cross){
  82.                
  83.                 int left = cross.length/2;
  84.                 int right = cross.length/2;
  85.                
  86.                 //0表示横坐标, 1表示纵坐标
  87.                 switch(flag){
  88.                 case 0 :
  89.                         for(int i=0;i<control;i++,left--,right++){
  90.                                 cross[j][left] = "0";
  91.                                 cross[j][right] = "0";
  92.                         }
  93.                         break;
  94.                 case 1 :
  95.                         for(int i=0;i<control;i++,left--,right++){
  96.                                 cross[left][j] = "0";
  97.                                 cross[right][j] = "0";
  98.                         }
  99.                         break;
  100.                 }
  101.                
  102.         }
  103.         
  104.         
  105.         //加入转角的位置
  106.         private static void corner(String[][] cross,int x,int y,int flag){
  107.                
  108.                 switch(flag){
  109.                 case 0:
  110.                         cross[x][y] = "0";
  111.                         cross[x][y-1] = "0";
  112.                         cross[x][y-2] = "0";
  113.                         cross[x-1][y] = "0";
  114.                         cross[x-2][y] = "0";
  115.                         break;
  116.                 case 1:
  117.                         cross[x][y] = "0";
  118.                         cross[x][y+1] = "0";
  119.                         cross[x][y+2] = "0";
  120.                         cross[x-1][y] = "0";
  121.                         cross[x-2][y] = "0";
  122.                         break;
  123.                 case 2:
  124.                         cross[x][y] = "0";
  125.                         cross[x][y-1] = "0";
  126.                         cross[x][y-2] = "0";
  127.                         cross[x+1][y] = "0";
  128.                         cross[x+2][y] = "0";
  129.                         break;
  130.                         case 3:
  131.                         cross[x][y] = "0";
  132.                         cross[x][y+1] = "0";
  133.                         cross[x][y+2] = "0";
  134.                         cross[x+1][y] = "0";
  135.                         cross[x+2][y] = "0";
  136.                         break;
  137.                 }
  138.                
  139.         }
  140.         
  141. }

复制代码
1个小时完成了!~不过代码还有冗余!~总体算完成!~

评分

参与人数 2技术分 +2 黑马币 +15 收起 理由
Sword + 2
小石头39910 + 15 很给力!

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
/*思路:发现数字3时,第一行是3*4+1=13个星号,输入数字4时是4*4+1=17个星号。
实际打印时,分为五大部分:首末行,中间行,中间行的上下两行,其他行的上部分,其他行的下部分
之所以这样分开,是因为按奇数行偶数行来打印的。测试中发现一些行不符合普遍规律,所以单独列出。
而且由于两行之间有一个字符的间距,所以横向打印星号时实际打印的是星号加空格,要打印空格时,实际打印的
是两个空格。这样就是一个标准的正方形了。
*/
class Test12
{
        public static void main(String[] args)
        {
                test12(3);
                System.out.println("---------------------------------------- ");
                test12(4);
        }
        public static void test12(int num)
        {
                for( int x=1;x<=4*num+5 ;x++)
                {
                        if(x==1||x==4*num+5)//首行和末行
                        {
                                System.out.print("    ");
                                for(int y=0;y<4*num+1 ;y++)
                                {
                                        System.out.print("* ");
                                }
                                System.out.print("    ");
                        }
                        while(x>1&&x<2*num+2)
                        {
                                if(x%2==1)//上半部的奇数行
                                {
                                        for(int y=0;y<x/2-1;y++)
                                        {
                                                System.out.print("* * ");
                                        }
                                        System.out.print("* * *   ");
                                        for(int y=0;y<4*(num-x/2)+1;y++)
                                        {
                                                System.out.print("* ");
                                        }
                                        System.out.print("  * * * ");
                                        for(int y=0;y<x/2-1;y++)
                                        {
                                                System.out.print("  * ");
                                        }
                                }
                                if(x%2==0)//上半部的偶数行
                                {
                                        for(int y=0;y<x/2-1 ;y++)
                                        {
                                                System.out.print("*   ");
                                        }
                                        System.out.print("    * ");
                                        for(int y=0;y<4*(num-x/2+1)-1 ;y++)
                                        {
                                                System.out.print("  ");
                                        }
                                        System.out.print("*     ");
                                        for(int y=0;y<x/2-1 ;y++)
                                        {
                                                System.out.print("  * ");
                                        }      
                                }
                                break;
                        }
                        if(x==num*2+3)//中间行
                        {
                                for(int y=0;y<num;y++)
                                {
                                 System.out.print("*   ");
                                }
                                for(int y=0;y<5;y++)
                                {
                                System.out.print("* ");
                                }
                                for(int y=0;y<num;y++)
                                {
                                 System.out.print("  * ");
                                }
                        }
                        if(x==num*2+2||x==num*2+4)//中间行的上下行
                        {
                                for(int y=0;y<num;y++)
                                {
                                        System.out.print("*   ");
                                }
                                System.out.print("    *     ");
                                for(int y=0;y<num;y++)
                                {
                                 System.out.print("  * ");
                                }
                        }
                                while(x>num*2+4&&x<4*num+5)
                                {
                                        if(x%2==1))//下半部的奇数行
                                        {
                                                for(int y=0;y<2*num-x/2+1;y++)
                                                {
                                                        System.out.print("*   ");
                                                }
                                                System.out.print("* * *   ");
                                                for(int y=0;y<4*(x/2-num-2)+1;y++)
                                                {
                                                        System.out.print("* ");
                                                }
                                                System.out.print("  * * * ");
                                                for(int y=0;y<2*num-x/2+1;y++)
                                                {
                                                        System.out.print("  * ");
                                                }      
                                        }
                        
                                        if(x%2==0))//下半部的偶数行
                                        {
                                                for(int y=0;y<(2*num+3-x/2)-1 ;y++)
                                                {
                                                        System.out.print("*   ");
                                                }
                                                System.out.print("    * ");
                                                for(int y=0;y<4*(x/2-num-2)-1;y++)
                                                {
                                                        System.out.print("  ");
                                                }
                                                System.out.print("*     ");
                                                for(int y=0;y<(2*num+3-x/2)-1 ;y++)
                                                {
                                                        System.out.print("  * ");
                                                }      
                                        }
                                        break;
                                }      
                                System.out.println();
               
                }
        }
}


1.jpg (58.05 KB, 下载次数: 0)

打印结果

打印结果

评分

参与人数 1技术分 +2 收起 理由
Sword + 2

查看全部评分

回复 使用道具 举报
高手如云 学习了
回复 使用道具 举报
高手们的思想太可怕了
回复 使用道具 举报
To 金牌黑马 2013-5-29 18:20:42
20#
高手在民间。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马