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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马振兴 中级黑马   /  2012-7-30 21:52  /  4089 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

         A
      A B A
   A B C B A
A B C D C B A

这题咋搞啊。。
折腾了一天没搞出来。
哪个高手来指点个思路吧

12 个回复

倒序浏览
本帖最后由 赵方明 于 2012-7-30 22:15 编辑

class  ForForTest
{
    public static void main(String[] args)
    {
        char [][] arr={{'A'},{'A','B','A'},{'A','B','C','B','A'},{'A','B','C','D','C','B','A'}};//定义一个二维数组,通过打印arr[j]来实现金子塔里字母的变换。
        //外层循环,控制金字塔的行数
        for (int i=0; i<arr.length ;i++ )
        {
            //内层循环一,控制每行开始前打印的空格的个数
             for (int k = arr.length - i; k > 0; k--)
             System.out.print(" ");
             //内层循环二,在第i行,依次打印arr数组里的每个元素。
             for (int j = 0; j < arr.length; j++)
            {
             System.out.print(arr[j]);
            }
            System.out.println();//换行
            
        }
        
    }
}

评分

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

查看全部评分

回复 使用道具 举报
  1. 不难,你只要准思路就行了,循环嵌套时外循环控制行数,内循环控制列数,而且只能打印正三角,倒三角,这样分析这个题就简答多了,代码如下:
  2. /*
  3. *注意尽量每段代码要加上注释!!
  4. *需求:打印字母塔
  5. *思路:
  6. *步骤:
  7. */
  8. import java.util.*;
  9. class Test
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 //首先你要把这个图形分成三个直角三角形
  14.                 for (int x=65;x<69;x++)
  15.                 {
  16.                         for (int y=x;y<69;y++)
  17.                         {
  18.                                 System.out.print(" ");
  19.                         }
  20.                        
  21.                         for (int z=65;z<=x;z++)
  22.                         {
  23.                                 System.out.print((char)z);
  24.                         }
  25.                         for (int a=x-1;a>64;a--)
  26.                         {
  27.                                 System.out.print((char)a);
  28.                         }
  29.                         System.out.println("");
  30.                 }

  31.                 System.out.println((int)'A');
  32.         }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 还可以,值一分

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {//这里利用打印两个正角三角形拼起来实现。注意第二个正角三角形第一行是不打印的。
                char[] c={'A','B','C','D','E','F','G','H'};//要打印的字母数组,
                for(int i=0;i<5;i++){
                        for(int j=0;j<4-i;j++){
                                System.out.print(" ");
                        }
                        for(int k=0;k<=i;k++){
                                System.out.print(c[k]);
                        }
                        for(int k=0;k<i;k++){
                                System.out.print(c[i-k-1]);//需要注意的是这里,这里的字母数组下标是跟上面相反,上面从0到3,这里就是从3到0
                        }
                       
                        for(int j=0;j<4-i;j++){
                                System.out.print(" ");
                        }
                       
                        System.out.println();
                }
               

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 郑正华 于 2012-7-30 22:54 编辑

终于写出来了!!!如果你想换成紧凑型的,三个输出命令分别去掉一个空格!
  1. public class Letter {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 int row = 5;   ←这里,你可以随便来调整你的行数!!!
  7.                
  8.                 for (int i = 1; i < row; i++) {
  9.                         // 空格
  10.                         for (int j = 1; j < row - i; j++) {
  11.                                 System.out.print("  ");←注意这里是两个空格啊!
  12.                         }
  13.                         // 左半部分输出
  14.                         for (int j = 1; j < i; j++) {
  15.                                 System.out.print((char)(j+64)+" ");←注意这里是一个空格啊!
  16.                         }
  17.                         // 右半部分输出
  18.                         for (int j = i; j > 0; j--) {
  19.                                 System.out.print((char)(j+64)+" ");←注意这里是一个空格啊!
  20.                         }
  21.                         System.out.println();

  22.                 }

  23.         }

  24. }
复制代码

未命名.jpg (19.17 KB, 下载次数: 32)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
3楼给力。甚合我意

我的思路也是分成3个三角形来做
就是第三个正三角形怎么也搞不出来
看了你的代码 瞬间明朗了
回复 使用道具 举报
金龙 发表于 2012-7-30 22:31

哥们,你这代码有点小问题,打印结果是
    A
   ABA
  ABCBA
ABCDCBA
65
你把最后一句System.out.println((int)'A');注释掉就可以了
回复 使用道具 举报
来看我做的吧。我昨天琢磨这个琢磨到凌晨。你现在学嵌套循环,估计后面数组还没学吧,这里我也没用数组。纯粹for循环。
这里我用宋体,宋体空格和+号占的位置一样。

/**
      A
    A B A
  A B C B A
A B C D C B A
思路:上图可以分为三部分,
如图所示:(空格用+表示)
++++++A|
++++A B| A
++A B C| B A
A B C D| C B A
用一个for循环嵌套3个内循环来实现这三部分。
诀窍:执行结果尖朝上,可以改变条件,让条件随着外循环改变。尖朝下,可以改变初始化值,让初始化值随着外循环改变。
*/
class Test
{
        public static void main(String[] args)
        {
                for(int a=1;a<=4;a++)
                {
                        for(int b=a+1;b<=4;b++)//控制空格
                        {
                                System.out.print("  ");
                        }
                        for(int c=1;c<=a;c++)//控制左边四列字母
                        {
                                char ch=(char)(c+64);//1+64=65,即为'A','A'在ANSI中代表65.char ch=(char)('A'+c-1);这样写也可以,道理一样 你可以琢磨下
                                System.out.print(ch+" ");
                        }
                        for(int d=a-1;d>=1;d--)//控制右边三列字母。这里的条件控制,你可以试着改动一下,看看有什么变化 这样你能更好理解。
                        {
                                char ch=(char)(d+64);//char ch =(char)('A'+d-1)
                                System.out.print(ch+" ");
                        }
                                System.out.println();
                }
        }


}

回复 使用道具 举报
我晕,咱们一个班的,呵呵
回复 使用道具 举报
田向向 发表于 2012-7-30 22:55
哥们,你这代码有点小问题,打印结果是
    A
   ABA

貌似人家是用那个算大写A对应的ascii码表是多少吧
回复 使用道具 举报
吴立杰 发表于 2012-7-30 23:06
貌似人家是用那个算大写A对应的ascii码表是多少吧

回复 使用道具 举报
田向向 发表于 2012-7-30 22:55
哥们,你这代码有点小问题,打印结果是
    A
   ABA

嘿嘿,这个是一开始算一下A对应的码表是多少来着,最后忘删了……
回复 使用道具 举报
马振兴 发表于 2012-7-30 22:47
3楼给力。甚合我意

我的思路也是分成3个三角形来做

我还要补充一点,本来我想把外层循环的控制变量通过用户输入来控制的。所以一开始就随便写了个,后面忘记改了,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马