問題描述:寫一程式依據輸入印出圖形.

當輸入 3 時,印出
ABC
AB
A

【將複雜或抽象問題轉成基本模式】
若將 A 轉換成 1、B 轉換成 2、C 轉換成 3,
則輸出應該是
123
12
1

【恢復 n 值為定值,並修改原程式結構】
思考上一題,輸出字元數是依據 y 值與 x
值的差,因此輸出字元數與 x 遞增有關,
x 主要目的是表達列的編號,1 列、2 列、
3 列,而 y 值是依據 x 值大小輸出字元數,
1 字、2 字、3 字,今若要改變成遞減模
式,則 y 值必須從 n 值開始遞減成 3 字、
2 字、1 字 。
另外,輸出不能依據 y 值,否則會變 321,
思考如何從 321 變成 123?
令輸出為 n-y+1 即為正解。

int n,x;
n=3;
for(x=1 ; x<=n ; x++){
     for(y=n; y>=x; y--){
          printf("%d",n-y+1);
     }
     printf("\n");
}



【將 123 轉換成 ABC】
檢查 A 之 ASCII 碼為 65,B 為 66,依此類推,
因此 輸出之 1、2、3 每位數字加上 64,就成為
65、66、67 了,再將此數字轉型成字元即為所求了。

int n,x;
n=3;
for(x=1 ; x<=n ; x++){
     for(y=n; y>=x; y--){
          printf("%c",(n-y+1)+64);
     }
     printf("\n");
}




【修飾一下程式碼】
printf("%c",(n-y+1)+64); 變成
printf("%c",n-y+65); 再變成
printf("%c",n-y+"A");
因此最後程式碼為:

int n,x;
n=3;
for(x=1 ; x<=n ; x++){
     for(y=n; y>=x; y--){
          printf("%c",(n-y+"A");
     }
     printf("\n");
}

下一個工作是恢復 n 的輸入方式即為所求。

int n,x;
printf("Input the n : ");scanf("%d",&n);
for(x=1 ; x<=n ; x++){
     for(y=n; y>=x; y--){
          printf("%c",(n-y+"A");
     }
     printf("\n");
}