边长为n的正六边形

 

  前几天参加了一个比赛,题目:输出边长为n的正六边形,边长用" * "表示,,,写的好复杂啊,,,求简单算法。。。

    算法:先输出上半部分,然后输出下办部分,两者分开,中间用循环,先打印空格,然后打印*,然后在打印中间的空心空格,最后打印*。

    代码如下:

 1 #include <stdio.h>

 2 

 3 int main()

 4 {

 5     int i, j, x, y; //各个层的循环变量

 6     

 7     int nBorder = 0; //初始化边长

 8     int nSpace; //中间空格数

 9 

10     //正确赋值边长

11     printf("请输入正六边形边长(n >= 2): ");

12     scanf("%d", &nBorder);

13     while (nBorder <2)

14     {

15         printf("非法输入,请重新输入。");

16         scanf("%d", &nBorder);

17     }

18 

19     nSpace = nBorder - 2;  //初始化中间空格数

20 

21     //先输出正六边形上半部分 ( n行 )

22     for (i = 0; i < nBorder; i++)  //外循环控制行输出

23     {

24         for (j = 0; j < nBorder - 1 - i; j++) //内循环控制列输出

25         {

26             printf(" "); //打印空格

27         }

28 

29         if (0 == i)  //第一行

30         {

31             for (x = 0; x < nBorder;x++)

32             {

33                 printf("*");

34             }

35         }

36         else

37         {

38             printf("*");

39 

40             nSpace = nSpace + 2;

41             for (y = 0; y < nSpace; y++)

42             {

43                 printf(" ");  //打印中间的空心空格

44             }

45 

46             printf("*");  //打印一行最后一个*

47         }

48         

49         printf("\n");  //换行

50     }

51 

52     //然后输出下半部分 ( n - 1 行 )

53     nSpace = nBorder + (nBorder - 2) * 2;  //重新初始化中间空格数

54 

55     for (i = 1; i <= nBorder - 1; i++)

56     {

57         for (j = 0; j < i; j++)

58         {

59             printf(" ");  //打印起始空格数

60         }

61 

62         if ((nBorder - 1) == i)   //最后一行

63         {

64             for (x = 0; x < nBorder; x++)

65             {

66                 printf("*");

67             }

68         }

69         else

70         {

71             printf("*");

72 

73             nSpace = nSpace - 2;

74             for (y = 0; y < nSpace; y++)

75             {

76                 printf(" "); //打印中间的空心空格

77             }

78 

79             printf("*"); //打印一行最后一个*

80         }

81 

82         printf("\n");   //换行

83     }

84 

85     return 0;

86 }

边长为n的正六边形

 

你可能感兴趣的:(边长为n的正六边形)