輸入資料後,首先要找出方塊的長跟寬。我想像中一開始就單純一行,然後有個可移動的直線控制一行的數量,一次往內縮減一格,直到符合條件才停止。
其中
width = len / height + (len % height ? 1 : 0);這行是看看長度除以高度能否被整除?如果不能,代表說有不成行的,要加一。
最後就是輸出答案。
程式碼:
#include <iostream> #include <string> using namespace std; int main() { int len, width, height; //height >= width string s; while (cin >> s) { len = s.size(); height = 1; width = len / height; while (width > height) // find height & width { height++; width = len / height + (len % height ? 1 : 0); //make sure width is right } for (int i = 0; i < height; i++) // print squre { for (int j = 0; j < width; j++) { if (i + j * height < len) cout << s[i + j * height]; else cout << " "; } cout << endl; } } return 0; }
另一個解法
#include <iostream> #include <string> using namespace std; int main() { string text; while (cin >> text) { int n = 1; while (n*n < text.size()) n++; if (n*n == text.size()) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << text[i + n * j]; cout << endl; } } else { int w = text.size() % n == 0 ? text.size() / n : text.size() / n + 1; for (int i = 0; i < n; i++) { for (int j = 0; j < w; j++) { if (i + n * j >= text.size()) cout << " "; else cout << text[i + n * j]; } cout << endl; } } } return 0; }
沒有留言:
張貼留言