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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李君言 中级黑马   /  2013-4-20 23:28  /  1992 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李君言 于 2013-4-21 14:33 编辑

本人刚学,在做到这个题时,不知道怎么对齐,或者有更加简单的方法,谢谢!

            //输入一个奇数时,例如5,输出下面的图形
            //  *
            // ***
            //*****
            // ***
            //  *
            Console.WriteLine("输入一个奇数");
            int m = Convert.ToInt32(Console .ReadLine ());
            for (int a = 1; a <= m; a+=2)
            {
                for (int b=1; b<=a;b++ )
                {
                    Console.Write("*");
                }
                Console.WriteLine("");
            }
            for (int a = m-2; a >= 1; a -=2)
            {
                for (int b = a; b >= 1; b--)
                {
                    Console.Write("*");
                }
                Console.WriteLine("");
            }
            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

3 个回复

倒序浏览
首先,观察一下,
1、假设输入的奇数==5,这时中间的那行要打印5个*,第一行如果想对齐,就要打印两个空格,第三个位置打印*,后两个再放两个空格,第二行前后打印一个空格
假设输入的奇数==7,那么第一行打印三个空格,第四个放*,然后再打印三个空格。。。
2、x=5时,每行的第三个永远是*,x=7时,每行的第四个永远是*
3、x=5时,要打印5行,每行5个字符,x=7时,要打印7行,每行7个字符。
所以:
x=5时,(x/2)+1 = 3 就是最中间,第一行要打印3-1个空格,2*1-1个*,3-1个空格,第二行要打印3-2个空格,2*2-1个*,3-2个空格,第三行要打印3-3个空格,2*3-1个*,3-3个空格
x=7时,(x/2)+1 = 4 就是最中间,第一行要打印4-1个空格,1个*,4-1个空格,
找到规律了。。。。把行号代进去:
x=5时,(x/2)+1 = 3 就是最中间,那么当row < (x/2)+1:第row行要打印3-row个空格,2*row-1个*,3-row个空格。
                                                      当row == (x/2)+1:直接打印x个*
                                                      当row > (x/2)+1:把row换成x-row

评分

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

查看全部评分

回复 使用道具 举报
这个题主要就是找规律,楼上分析地很详细。。
代码这里有:http://bbs.itheima.com/forum.php ... mp;page=1#pid294962
回复 使用道具 举报
Console.Write("请输入你要输出的菱形的对角线长度(5-50之间且为奇数):");
            bool falg=true;
            int l = 0;
            do
            {
                try//判断用户输入的数据是否有误
                {
                    
                    l = Convert.ToInt32(Console.ReadLine());
                    if (l >= 5 && l < 50 && l % 2 != 0)//判断l是否为奇数  如果l太大影响显示效果  所以我让他小于50
                    {
                        falg = false;
                    }

                    else
                    {
                        Console.WriteLine("你输入的数据有误,请重新输入!");
                    }

                }
                catch
                {
                    Console.WriteLine("你输入的数据有误,请重新输入!");
                    //Console.ReadKey();

                }
               
            }
            while (falg);// 下面就是输出菱形
                for (int i = 1; i <= l / 2 + 1; i++)//先输出*递增的几行
                {
                    for (int j = 1; j <= l / 2 - i + 1; j++)
                        Console.Write(" ");
                    for (int k = 1; k <= 2 * i - 1; k++)
                        Console.Write("*");
                    Console.WriteLine();
                }
                for (int i = 1; i <= l / 2; i++)//再输出*递减的几行
                {
                    for (int j = 1; j <= i; j++)
                        Console.Write(" ");
                    for (int j = 1; j <= l - 2 * i; j++)
                        Console.Write("*");
                    Console.WriteLine();
                }
                Console.ReadKey();


自己写的  你应该能看懂。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

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