zoukankan      html  css  js  c++  java
  • 边长为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 }

     

    ————————————————————————————————————————————————————————————————— 一个理想主义者的追梦旅程
  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/michaelGood/p/2726927.html
Copyright © 2011-2022 走看看