下三角形的一些思考

一、下等腰三角形

問題描述:用雙重循環實現以下圖形的輸出

    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");
    }
}

參考

雙重循環的應用實例--等腰三角形相關

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章