黑马程序员技术交流社区

标题: 求好方法 [打印本页]

作者: 潘龙旺    时间: 2013-6-26 23:35
标题: 求好方法
本帖最后由 潘龙旺 于 2013-6-27 21:33 编辑

当输入一个奇数时输出相对应的由*号组成的菱形如图,上为输出的菱形,下为输入的奇数。请教好方法!!!
作者: 吕柳根    时间: 2013-6-26 23:56
我记得我做过类似的题目,你可以改下就成
    int i, j, k;
            for (i = 1; i <= 4; i++)
            {
                for (j = 1; j <= 4 - i; j++)
                    Console.Write (" ");
                for (k = 1; k < 2 * i; k++)
                    Console.Write ("*");
                Console.WriteLine ();
            }
            for (i = 3; i > 0; i--)
            {
                for (j = 3; j >= i; j--)
                    Console.Write (" ");
                for (k = 1; k < 2 * i; k++)
                    Console.Write ("*");
                Console.WriteLine ();
            }
            Console.ReadKey();
作者: 彭家贰小姐    时间: 2013-6-27 00:24
可以实现了 但感觉不是很好 同样求好方法
  1. using System;

  2. namespace test13
  3. {
  4. internal class Program
  5. {
  6. //当输入一个奇数时输出相对应的由*号组成的菱形如图,上为输出的菱形,下为输入的奇数。
  7. private static void Main(string[] args)
  8. {
  9. Console.WriteLine("请输入一个奇数:");
  10. try
  11. {
  12. var num = Convert.ToInt32(Console.ReadLine()); //接受用户输入的文本
  13. if (num % 2 == 0)
  14. {
  15. Console.WriteLine("您输入的不是奇数...");
  16. }
  17. else
  18. {
  19. for (var i = 1; i <= num; i++)
  20. {
  21. if (i%2 == 0) continue;
  22. for (var j = 0; j < (num-i)/2; j++)
  23. {
  24. Console.Write(" ");
  25. }
  26. for (var k = 0; k < i; k++)
  27. {
  28. Console.Write("*");
  29. }
  30. Console.WriteLine();
  31. }
  32. for (var x=num-1; x > 0; x--)
  33. {
  34. if (x%2 == 0) continue;
  35. for (var y = 0; y < (num - x) / 2; y++)
  36. {
  37. Console.Write(" ");
  38. }
  39. for (var z = 0; z < x; z++)
  40. {
  41. Console.Write("*");
  42. }
  43. Console.WriteLine();
  44. }
  45. }
  46. for (var q = 0; q < num/2; q++)
  47. {
  48. Console.Write(" ");
  49. }
  50. Console.Write(num);
  51. Console.ReadKey();
  52. }
  53. catch (Exception)
  54. {
  55. Console.WriteLine("格式错误...");
  56. }
  57. }
  58. }
  59. }
复制代码


作者: 逆_水_寒    时间: 2013-6-27 00:57
int d = 15 ;
            for (int i = 1; i <= d/2+1; i++)
            {
                for (int j=0; j < (d-2*i+1)/2; j++)
                {
                    Console.Write(" ");
                }
                for (int s = 0; s <2*i-1;s++ )
                {
                    Console.Write("*");

                }
                Console.WriteLine();

            }
            for (int i = d/2+2; i <= d; i++)
            {
                for (int j = 0; j <(2*i-d-1)/2; j++)
                {
                    Console.Write(" ");
                }
                for (int s = 0; s <2*(d-i)+1; s++)
                {
                    Console.Write("*");

                }
                Console.WriteLine();

            }
作者: 潘龙旺    时间: 2013-6-27 08:24
谢谢您的回复
作者: 吕柳根    时间: 2013-6-27 11:48
彭家贰小姐 发表于 2013-6-27 00:24
可以实现了 但感觉不是很好 同样求好方法

你那个有没有太长了,能否假定用户就是输入的奇数,写的精简点!
作者: 彭家贰小姐    时间: 2013-6-27 13:24
吕柳根 发表于 2013-6-27 11:48
你那个有没有太长了,能否假定用户就是输入的奇数,写的精简点!
  1. for (var i = 1; i <= num; i++)
  2. {
  3.         if (i%2 == 0) continue;
  4.         for (var j = 0; j < (num-i)/2; j++)
  5.         {
  6.                 Console.Write(" ");
  7.         }
  8.         for (var k = 0; k < i; k++)
  9.         {
  10.                 Console.Write("*");
  11.         }
  12.         Console.WriteLine();
  13. }
  14. for (var x=num-1; x > 0; x--)
  15. {
  16.         if (x%2 == 0) continue;
  17.         for (var y = 0; y < (num - x) / 2; y++)
  18.         {
  19.                 Console.Write(" ");
  20.         }
  21.         for (var z = 0; z < x; z++)
  22.         {
  23.                 Console.Write("*");
  24.         }
  25.         Console.WriteLine();
  26. }
  27. Console.Write(num);
  28. Console.ReadKey();
复制代码

作者: 万大述    时间: 2013-6-27 14:39
1、写一个得到一个正奇数的函数;2、打印前半段(补空格);3、打印后半段(补空格);4、打印输入数字。参考代码如下:
static void Main(string[] args)
        {
            int number=ReadIntOdd(); //调用函数得到一个正奇数
            for (int i = 0; i < number; i += 2) //打印“*”增加的前半段
            {
                for (int j = 0; j <(number-i)/2; j++) //补相应的空格,注意结束条件的设置
                {
                    Console.Write(" ");
                }
                for (int k = 0; k <= i; k++) //打印符合要的“*”数量
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            for (int i = number-3; i >=0; i -= 2) //打印“*”减少的后半段
            {
                for (int j = 0; j < (number - i) / 2; j++)
                {
                    Console.Write(" ");
                }
                for (int k = 0; k <= i; k++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            for (int x= 0; x < number/2; x++) //在数字前补相应的空格
            {
                Console.Write(" ");
            }
            Console.WriteLine(number); //打印输入数字
            Console.ReadKey();


        }
        
        static int ReadIntOdd() //该方法要求用户输入一个正奇数
        {
            int number = 0;
            do
            {
                try
                {
                    number = Convert.ToInt32(Console.ReadLine());
                    if (number >= 0&&number%2==1)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("请输入一个正奇数!");
                        continue;
                    }
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    continue;
                }
            } while (true);
            return number;
        }




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