PAT-ADVANCED1031——Hello World for U
阿新 • • 發佈:2018-11-11
我的PAT-ADVANCED程式碼倉:https://github.com/617076674/PAT-ADVANCED
原題連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805462535356416
題目描述:
題目翻譯:
1031 U型Hello World
給定任意N(>= 5)個字元的字串,你需要將字串組成U形。例如,helloworld可以列印為:
h d
e l
l r
lowo
也就是說,必須以原始順序列印字元,從左垂線開始自上而下含有n1個字元,然後沿著底線從左到右含有n2個字元,最後沿著右垂直線自下而上含有n3個字元。而且,我們希望U儘可能地成為一個正方形——也就是說,必須滿足n1 = n3 = max { k | k <= n2 其中,3 <= n2 <= N } 且n1 + n2 + n3 − 2=N。
輸入格式:
每個輸入檔案包含一個測試用例。 每個測試用例包含一個不少於5個字元且不超過80個字元的字串。該字串不包含空格。
輸出格式:
對每個測試用例,列印輸入字串的U型輸出。
輸入樣例:
helloworld!
輸出樣例:
h !
e d
l l
lowor
知識點:字串
思路:根據輸入字串長度計算出n1、n2和n3的值
n1 = n3 = (len + 2) / 3
n2 = (len + 2) - n1 - n3
其中len為輸入字串的長度。
時間複雜度是O(len)。空間複雜度是O(1)。
C++程式碼:
#include<iostream> #include<cstring> int main(){ char input[81]; scanf("%s", input); int n1 = (strlen(input) + 2) / 3; int n3 = n1, n2 = strlen(input) + 2 - n1 - n3, left = 0, right = strlen(input) - 1; for(int i = 0; i < n1 - 1; i++){ printf("%c", input[left++]); for(int j = 0; j < n2 - 2; j++){ printf(" "); } printf("%c\n", input[right--]); } for(int i = left; i <= right; i++){ printf("%c", input[i]); } printf("\n"); return 0; }
C++解題報告: