日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解题报告——例题5-8 Unix is 命令(UVa 400)——26行代码解决

發布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解题报告——例题5-8 Unix is 命令(UVa 400)——26行代码解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:

讀入n個字符串,按字典序排序,再按列優先輸出,附加條件每行最多輸出60個字符,在此條件下要求行最少。(最開始沒仔細看題,以為在一行中,每個單詞相隔最長單詞的長度+2,最后一列單詞空間長度為最長單詞的長度,不夠用空格補齊。o(╥﹏╥)o。)

注意點:

1、求行數和列數時,容易想到的方法是O(n)復雜度的遍歷求法,但可以優化為復雜度為O(1)的求法
2、如果對本題求解過程有清晰的階段劃分,做起來會事半功倍。
最好遵循螺旋模型的法則:將整道題分為若干階段,每完成一階段就測試一下這以前求的值是否正確,如果錯了,馬上改正,確保減少后期Debug的時間。
如:1、將輸入串存入數組后,輸出數組,檢測是否正確存入; 2、求出行數和列數后,輸出行列數,檢測是否正確求出。 期間保證測試多組數據。
3、一維數組按列輸出為二維數組的方法: 當前列*總行數+當前行數。 一維數組按行輸出為二維數組同理。


題目(提交)鏈接→UVa-400
如果不會用vJudge網站,請猛戳這里→vJudge教程


這段代碼借鑒了劉先生求行列數按列輸出的技巧,但沒有寫print函數,采用#include<iomanip>頭文件中的setw()和setiosflags()設置域寬和左對齊。(代碼在第20行)

代碼:

#include<bits/stdc++.h> using namespace std; const int Maxcols = 60; int main() {int n; while(cin >> n) {vector<string>s; int Max = 0;for(int i = 0; i < n; i++) {string x; cin >> x;s.push_back(x);Max > x.length() ? : Max = x.length();} sort(s.begin(), s.end());int cols = (Maxcols-Max)/(Max+2)+1, rows = ((s.size()+(cols-1))/cols); //求行數和列數for(int i = 0; i < 60; i++) cout << '-'; cout << endl; //輸出------------ for(int r = 0; r < rows; r++) { //按列輸出序列 for(int c = 0; c < cols; c++) {int idx = c * rows + r;if(idx < s.size()) //setw(x)是設置x長的域寬,setiosflags()用來設置左對齊or右對齊; cout << (c==cols-1?setw(Max):setw(Max+2)) << setiosflags(ios::left)<<s[idx]; }cout << "\n";} } return 0; }

收獲:

1、螺旋模型測試程序(分成若干階段,完成一階段進行值測試,若值不正確,則迭代修改)
2、按列輸出(一維數組,列*總行數+當前行數)

可優化的:

1、o(1)復雜度求行和列
2、const常量代替常數


日拱一卒,功不唐捐。

總結

以上是生活随笔為你收集整理的解题报告——例题5-8 Unix is 命令(UVa 400)——26行代码解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。