黑马程序员技术交流社区

标题: 今天复习的时候一道习题,把我给难住了。。求解! [打印本页]

作者: nooooy    时间: 2013-10-21 20:56
标题: 今天复习的时候一道习题,把我给难住了。。求解!
本帖最后由 nooooy 于 2013-10-22 11:02 编辑

让用户输入一个数,代表这个菱形的行数。
假如用户输入5,显示如下。
        *
      ***
    *****
      ***
        *
假如用户输入3,显示如下。
      *
    ***
      *
作者: 猫咪不吃糖    时间: 2013-10-21 22:28
  1.         static void Main(string[] args)
  2.         {
  3.             int line;
  4.             Console.Write("输入行数:");
  5.             if(!int.TryParse(Console.ReadLine(),out line)) return;
  6.             int mid = (line + 1) / 2;
  7.             for (int i = 0; i < mid; i++)
  8.             {
  9.                 for (int j = 0; j < mid - i; j++)
  10.                     Console.Write(" ");
  11.                 for(int k=0;k<i*2+1;k++)
  12.                     Console.Write("*");
  13.                 Console.WriteLine();
  14.             }
  15.             for (int i = mid; i < line; i++)
  16.             {
  17.                 for (int j = 0; j < i-line+mid+1; j++)
  18.                     Console.Write(" ");
  19.                 for (int k = 0; k < (line -i-1)*2+1; k++)
  20.                     Console.Write("*");
  21.                 Console.WriteLine();
  22.             }
  23.             Console.ReadKey();
  24.         }
复制代码

作者: 王云峰    时间: 2013-10-22 03:55
把菱形看作上下两部分,上部分到中间那一行,下部分是剩下的。
  1.            int num;
  2.             while (true)
  3.             {
  4.                 Console.Write("please input a number(while number<=0,exit):");
  5.                 if (int.TryParse(Console.ReadLine(), out num))
  6.                 {
  7.                     if (num > 0)
  8.                     {
  9.                         if (num % 2 != 0)
  10.                         {
  11.                             int middle = (num + 1) / 2;
  12.                             for (int i = 0; i < middle; i++)
  13.                             {
  14.                                 for (int j = 0; j < middle - i - 1; j++)
  15.                                     Console.Write(" ");
  16.                                 for (int k = 0; k < i * 2 + 1; k++)
  17.                                     Console.Write("*");
  18.                                 Console.WriteLine();
  19.                             }
  20.                             for (int i = middle; i < num; i++)
  21.                             {
  22.                                 for (int j = 0; j < i - num + middle; j++)
  23.                                     Console.Write(" ");
  24.                                 for (int k = 0; k < (num - i - 1) * 2 + 1; k++)
  25.                                     Console.Write("*");
  26.                                 Console.WriteLine();
  27.                             }
  28.                         }
  29.                         else
  30.                         {
  31.                             Console.WriteLine("please inpput an odd number!");
  32.                         }
  33.                     }
  34.                     else
  35.                     {
  36.                         break;
  37.                     }
  38.                 }
  39.             }
复制代码

作者: 杨靖    时间: 2013-10-22 09:27
我觉得菱形分为双数和单数:
  1. static void Main(string[] args)
  2.         {
  3.             int i = 0, j = 0, a = 0, x = 0;
  4.             bool flag = true;
  5.             while (flag)
  6.             {
  7.                 try
  8.                 {
  9.                     Console.WriteLine("输入数字?");
  10.                     x = Convert.ToInt32(Console.ReadLine());
  11.                     flag = false;
  12.                 }
  13.                 catch
  14.                 {
  15.                     Console.WriteLine("输入的数字有误");
  16.                     flag = true;
  17.                 }
  18.             }
  19.             if (x % 2 != 0)                                     //单数中间打一行
  20.             {
  21.                 //菱形上半部分(包含中间行)
  22.                 for (a = 1; a <= x / 2 + 1; a++)                //打印行数
  23.                 {
  24.                     for (i = 1; i <= x / 2 + 1 - a; i++)        //打印空格
  25.                     {
  26.                         Console.Write(" ");
  27.                     }
  28.                     for (j = 1; j <= 2 * a - 1; j++)            //打印*
  29.                     {
  30.                         Console.Write("*");
  31.                     }
  32.                     Console.WriteLine();
  33.                 }
  34.                 //菱形下半部分(不包含中间行)
  35.                 for (a = 1; a <= x / 2; a++)                    //打印行数
  36.                 {
  37.                     for (i = 1; i <= a; i++)                    //打印空格
  38.                     {
  39.                         Console.Write(" ");
  40.                     }
  41.                     for (j = 1; j <= x - 2 * a; j++)            //打印*
  42.                     {
  43.                         Console.Write("*");
  44.                     }
  45.                     Console.WriteLine();
  46.                 }
  47.             }
  48.             else                                                //双数中间打两行
  49.             {
  50.                 //菱形上半部分(包含中间行)
  51.                 for (a = 1; a <= x / 2 ; a++)                   //打印行数
  52.                 {
  53.                     for (i = 1; i <= x / 2 - a; i++)            //打印空格
  54.                     {
  55.                         Console.Write(" ");
  56.                     }
  57.                     for (j = 1; j <= 2 * a - 1; j++)            //打印*
  58.                     {
  59.                         Console.Write("*");
  60.                     }
  61.                     Console.WriteLine();
  62.                 }
  63.                 //菱形下半部分(不包含中间行)
  64.                 for (a = 1; a <= x / 2; a++)                    //打印行数
  65.                 {
  66.                     for (i = 1; i < a; i++)                     //打印空格
  67.                     {
  68.                         Console.Write(" ");
  69.                     }
  70.                     for (j = 1; j <= x - 2 * a+1; j++)          //打印*
  71.                     {
  72.                         Console.Write("*");
  73.                     }
  74.                     Console.WriteLine();
  75.                 }
  76.                
  77.             }
  78.             Console.ReadKey();
  79.         }
复制代码

作者: 张锟-i    时间: 2013-10-22 10:49
支持楼上。。。。。。
作者: nooooy    时间: 2013-10-22 11:00
王云峰 发表于 2013-10-22 03:55
把菱形看作上下两部分,上部分到中间那一行,下部分是剩下的。

没有注释不幸福啊:(
作者: nooooy    时间: 2013-10-22 11:01
猫咪不吃糖 发表于 2013-10-21 22:28

没注释不幸福:(
作者: nooooy    时间: 2013-10-22 11:01
杨靖 发表于 2013-10-22 09:27
我觉得菱形分为双数和单数:

非常感谢!:D
作者: 追溯客    时间: 2013-10-25 11:09

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2