/*-----------------------------------------------------*/ /*參考程式競賽與演算法入門經典P.5-32內容 */ /*-----------------------------------------------------*/ #include <stdio.h> #include <string.h> #include <algorithm> #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int max_col = 60; //最大行數 const int maxn = 105; //檔案名稱最大長度 string filenames[maxn]; int main(){ freopen("input.txt", "r", stdin); int n=0; while(cin >> n){ int M = 0; //檔案名稱最長長度 for(int i=0;i<n;i++){ cin >> filenames[i]; if((int)filenames[i].length()>M) M = filenames[i].length(); } sort(filenames, filenames+n); //sort for(int i=0;i<60;i++)printf("-"); printf("\n"); //行數=最大行數減最大檔名,除上最大檔名加2(得到除最後一行的行數) //再把最後一行加回來的數即是 int cols = (max_col-M)/(M+2) + 1; int rows = n/cols; if(n%cols==0); else rows++; //無條件進位 int flag; for(int r=0;r<rows;r++){ for(int c=0;c<cols;c++){ flag = c*rows+r; //直接計算出位置 if(flag < n)cout << filenames[flag]; for(int i=0; i<M-(int)filenames[flag].length() ;i++)cout << " "; cout << " "; } cout << "\n"; } } return 0; }
2014年12月8日星期一
[UVa] 400 - Unixls
奇怪的是,題目說最右邊欄的寬度是最大檔名長,但輸出時卻都要+2才會過...
訂閱:
發佈留言 (Atom)
-
因為先前寫UVa時,檔案名稱有時會花心思改,有時就直接把題目名稱加上.cpp就貼上了 導致現在有不同的格式出現 現在要處理的事情很簡單 1. 去除空白 2. 將底線 ( _ ) 換成dash ( - ) 經過一番查詢,終於發現最簡單的方法 - re...
-
文章出處: http://infbugs.blogspot.tw/2011/12/c_20.html 謝謝沙耶,解答了我長久以來對於 input/output 的疑惑。 C 語言入門 - 在線上批改系統練功 如何練習使用基本語法 自己出個練習題試著寫...
-
一開始用數學方法推斷得出,設輸入為n k為在n的前一斜線列數,故只要找到 (1+k)*k/2 < n 的最大k值,即可判定 k%2 == 1 => ((2*n)-(k*k)-k)/2 / ((k*k)+(3*k)-(2*n)+4)/2 k%2 ==...
沒有留言:
發佈留言