下三角形的一些思考

一、下等腰三角形

问题描述:用双重循环实现以下图形的输出

    AA
   ABBA
  ABCCBA
 ABCDDCBA
ABCDEEDCBA
 ABCDDCBA
  ABCCBA
   ABBA
    AA

1、思考过程

通过分析,将输出分为两大块。一为上三角,即从第1行到第i行,另外为下三角,即从第i+1行到2*i-1行。开始时,自己又另外将上三角分为三个模块:空格模块、A->最大字母以及最大字母->A。那么这样分析后,就很好办了。

输入:上三角行数a

输出

  • 第1行到第i行:用j控制行数(from 1 to i),则先输出a - i个空格,然后输出A->A+i,最后输出A+i->A
  • 第i+1行到2i-1行:可以用j控制行数(from 1 to i-1)(又从1计数,这和输出无关)。则先输出i - j个空格,然后输出A->A+i,最后输出A+i->A

反正这些变量太麻烦了,简直让人讨厌。有没有其他方法呢?头脑里闪过数学中对称思想,利用这种思想,就简单了很多了。

输出中第i+1行到2i-1行类似第1行到第i行的倒置,不过行数反过来而已。而输出A+i->A则可以看作是输出A->A+i对称,直接将循环控制语句稍作修改即可。

2、总结

其实开始时没有很好地利用对称信息,最终浪费了较多时间。如果能发现规律,则能较快地解决问题。

今天纠结的另外一个问题是输出A+i->A。初始代码如下:

    for ( k = i; k >= 1; k-- )
    {
        printf("%c", 'A'+k-1);
    }
    printf("\n");

这就相当于控制变量从i开始,那么规律则是+k。稍加总结,就可得出'A'+k-1规律。

通过这道题目,加深了循环命令的掌握。

3、附最后程序代码,如下:

/*
 * 作    者: 林龙
 * 专业班级:计算机学院
 * 完成日期:2014 年 3 月7 日
 * 版 本 号:v1.0
 * 输入描述:上三角行数
 * 问题描述:下等腰三角形(不同字母组成)
 * 程序输出:
        AA
       ABBA
      ABCCBA
     ABCDDCBA
    ABCDEEDCBA
     ABCDDCBA
      ABCCBA
       ABBA
        AA        
 * 算法设计:用双重循环进行控制,外循环控制行,内循环控制列(每行输出的字符个数)
 */
#include <stdio.h>
void PriAlpha( int a );
int main()
{
    PriAlpha( 5 );
    return 0;

}

void PriAlpha( int a )
{
    int i, j, k;
    for ( i = 1; i <= a ; i ++ )
    {
        // 输出空格
        for (  j = 1; j <= a - i ; j ++ )
        {
            printf(" ");
        }
        // 输出A-最大字母
        for ( k = 1; k <= i; k ++ )
        {
            printf("%c", 'A'+k-1);
        }
        // 输出最大字母-A
        for ( k = 1; k <= i; k ++ )
        {
            printf("%c", 'A'+i-k);
        }
        printf("\n");
    }
    // 下三角输出,只是上三角控制语句修改而已
    for ( i = a - 1; i >= 1 ; i -- )
    {

        for (  j = 1; j <= a - i ; j ++ )
        {
            printf(" ");
        }
        for ( k = 1; k <= i; k ++ )
        {
            printf("%c", 'A'+k-1);
        }
        for ( k = 1; k <= i; k ++ )
        {
            printf("%c", 'A'+i-k);
        }
        printf("\n");
    }
}

参考

双重循环的应用实例--等腰三角形相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值