国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

PAT-A 1031. Hello World for U (20)

2019-11-08 02:44:31
字體:
來源:轉載
供稿:網友

題目鏈接在此。

題意理解

將給定的字符串按照U形進行輸出。其中n1為左側豎線包含的字符數,n2位底部包含的字符數,n3位右側豎線包含的字符數,n1,n2,n3都包含拐角處的字符,于是有n1+n2+n3-2=N。此外,n1,n2,n3還需要滿足以下條件: 1. n1==n3 2. n2 >= n1 3. 在滿足以上條件的前提下,n1盡可能大

思路

對于“圖形輸出”的題型,一般都是兩種方法: 1. 找到規(guī)律,直接輸出 2. 找到規(guī)律,填入數組,輸出數組

對于這個題,我第一次想到的是填數組的方法,詳細介紹一下這個方法,至于直接輸出的方法,只需要注意輸出字符和空格的時機即可。

通過“題意理解”,我們可以列出幾個式子: n1<=n2 n3<=n2 n1+n2+n3-2 = N 這樣一來,我們可以得到n2>=(N+3)/2,那么,當n1=n3=(N+3)/2 時是符合題意的,故n2=N-n1-n3+2。(具體過程讀者自行演算、理解)

接下來就是將U分成左-下-右三個部分,填入PRint數組,細節(jié)不表,看代碼即可。

這里需要注意:print數組需要初始化為全空格、print數組的大小如果是固定大小,至少需要[28][28](根據式子且N<80可推出)。

填入數組法代碼

#include<stdio.h>#include<string.h>int main(){ char str[81]; int index = 0; scanf("%s",str); int n = strlen(str); int n1,n2,n3; n1 = n3 = (n+2)/3; n2 = n-n1-n3+2; char print[n1][n2]; //初始化print數組 for(int i = 0 ;i < n1; i++){ for(int j = 0; j < n2; j++){ print[i][j] = ' '; } } //填充n1 for(int i = 0; i < n1; i++){ print[i][0] = str[index++]; } index--; //填充n2 for(int i = 0; i < n2; i++){ print[n1-1][i] = str[index++]; } index--; //填充n3 for(int i = n3-1 ; i >= 0; i--){ print[i][n2-1] = str[index++]; } //輸出print數組 for(int i = 0 ; i < n1; i++){ for(int j = 0; j < n2; j++){ printf("%c",print[i][j]); } printf("/n"); } return 0;}

直接輸出法代碼

不詳細介紹,仍然需要通過上面的三個式子計算出n1,n2,n3的值,通過它們的值控制輸出的行和列,以及每行的輸出情況。

我的代碼是用了left和right兩個“指針”來控制輸入字符串str[]數組的元素獲取,也可以像《算法筆記》上通過N和循環(huán)變量的關系來得到需要輸出的元素,皆可。

#include<stdio.h>#include<string.h>int main(){ char str[81]; scanf("%s",str); int n1,n2,n3,n; n = strlen(str); n1 = n3 = (n+2)/3; n2 = n-n1-n3+2; int left = 0, right = n-1; for(int i = 0 ; i < n1; i++){ for(int j = 0; j < n2; j++){ if( i < n1-1 ){ //輸出n1和n3 if(j == 0){ printf("%c",str[left++]); } else if( j == n2-1){ printf("%c",str[right--]); }else{ printf(" "); } }else{ printf("%c",str[left++]); } } printf("/n"); } return 0;}

我把輸出控制(是輸出符號還是輸出空格)放到了循環(huán)變量里,也可以在每一行中,直接先輸出左側,然后輸出中間,再輸出右邊,這樣就不需要兩個循環(huán)變量之間的關系了。(《算法筆記》是這種方式)


上一篇:棋盤問題

下一篇:wpf之旅

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金阳县| 开封市| 正蓝旗| 车致| 大关县| 曲松县| 扎赉特旗| 三台县| 上饶县| 大埔区| 柏乡县| 突泉县| 平度市| 潮安县| 黄冈市| 马边| 宁明县| 全南县| 博湖县| 平舆县| 洛浦县| 景德镇市| 田东县| 江川县| 永吉县| 岳西县| 桐柏县| 桃江县| 合川市| 谷城县| 通许县| 浙江省| 张家川| 得荣县| 克山县| 黄平县| 航空| 民丰县| 南郑县| 栾城县| 灌南县|