問題描述:寫一程式依據輸入印出圖形. 當輸入 3 時,印出 aaa bb c bb aaa 【將複雜或抽象問題轉成基本模式】 若將 a 轉換成 1、b 轉換成 2、c 轉換成 3, 則輸出應該是 111 22 3 22 111 【恢復 n 值為定值,並修改原程式結構】 思考上一題,輸出字元數是依據 x 的絕對值 ,x 主要目的是表達該列的字元數,而 y 值 是依據 x 值大小輸出字元數,3 字、2 字、1字、 1 字、2 字、3字,因此 abs(x)+1 模式不變。 int x,y,n,t; n=3; for(x=-(n-1);x<=(n-1);x++){ t=abs(x)+1; for(y=1; y<=t; y++){ printf("%d",y); } printf("\n"); } ![]() 修正輸出的資料,依題意應輸出每列字元數 333 22 1 22 333 int x,y,n,t; n=3; for(x=-(n-1);x<=(n-1);x++){ t=abs(x)+1; for(y=1; y<=t; y++){ printf("%d",t); } printf("\n"); } ![]() 轉換輸出資料
原值+新值 = 4 = n+1 新值 = n+1-原值 調整公式 新值 = n+1-t int x,y,n,t; n=3; for(x=-(n-1);x<=(n-1);x++){ t=abs(x)+1; for(y=1; y<=t; y++){ printf("%d",n+1-t); } printf("\n"); } ![]() 【將 123 轉換成 abc】 檢查 a 之 ASCII 碼為 97,B 為 98,依此類推, 因此 輸出之 1、2、3 每位數字加上 96,就成為 97、98、99 了,再將此數字轉型成字元即為所求了。 int x,y,n,t; n=3; for(x=-(n-1);x<=(n-1);x++){ t=abs(x)+1; for(y=1; y<=t; y++){ printf("%c",n+1-t+96); } printf("\n"); } ![]() 【修飾一下程式碼】 printf("%c",n+1-t+96); 變成 printf("%c",n-t+97); 再變成 printf("%c",n-t+"a"); 因此最後程式碼為: int x,y,n,t; n=3; for(x=-(n-1);x<=(n-1);x++){ t=abs(x)+1; for(y=1; y<=t; y++){ printf("%c",n-t+"a"); } printf("\n"); } 下一個工作是恢復 n 的輸入方式即為所求。 int x,y,n,t; printf("Input the n : ");scanf("%d",&n); for(x=-(n-1);x<=(n-1);x++){ t=abs(x)+1; for(y=1; y<=t; y++){ printf("%c",n-t+"a"); } printf("\n"); } |