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 }

     

    ————————————————————————————————————————————————————————————————— 一个理想主义者的追梦旅程
  • 相关阅读:
    PHP商品秒杀倒计时
    【SAS NOTES】两个数据集merge
    【SAS NOTE】在proc means中根据某变量的范围进行统计+proc format
    【SAS NOTES】if then和if的区别
    【SAS NOTES】kindex判断字符串中是否含某子字符串& 用where在data步中选择部分数据
    【SAS NOTES】宏
    【SAS NOTES】两个数据集直接合并不考虑关键字匹配
    【SAS NOTES】在一个data中生成多个数据集
    【SAS NOTES】update
    【SAS NOTES】系统自带变量+%if
  • 原文地址:https://www.cnblogs.com/michaelGood/p/2726927.html
Copyright © 2011-2022 走看看