1031 Hello World for U (20分)
阿新 • • 發佈:2021-01-09
讀題不認真,以為是水題,沒想到還要小推導一下+_+
\(n_1\)和\(n_3\)是左右兩條豎線從上到下的字元個數,\(n_2\)是底部橫線從左到右的字元個數。
要求:
- \(n_1=n_3=max \{ k | k≤n_2\ for\ all\ 3≤n_2≤N \}\)
- \(n_1+n_2+n_3-2=N\)
- \(N>=5\)
設\(n = N+ 2\),因為\(2n_1 + n_2 = n\),且\(n_2 >= n_1\), 要求\(n_1\)儘可能大
- 如果\(n \mod 3 = 0\),\(n\)正好被\(3\)整除,因為要求\(n_1\)儘可能大,故\(n_1 = n_2 = n_3\)
- 如果\(n \mod 3 = 1\),因為\(n_2\)要比\(n_1\)大,所以把多出來的那1個給\(n_2\)
- 如果\(n \mod 3 = 2\), 就把多出來的那\(2\)個給\(n_2\)
string s; int n; int main() { cin>>s; n=s.size(); int h=(n+2)/3; int b=h+(n+2)%3; for(int i=0;i<h-1;i++) { cout<<s[i]; for(int j=0;j<b-2;j++) cout<<' '; cout<<s[n-1-i]<<endl; } for(int i=0;i<b;i++) { cout<<s[h-1+i]; } cout<<endl; //system("pause"); return 0; }