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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

題目大意:

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

注意點:

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


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


這段代碼借鑒了劉先生求行列數(shù)按列輸出的技巧,但沒有寫print函數(shù),采用#include<iomanip>頭文件中的setw()和setiosflags()設置域?qū)捄妥髮R。(代碼在第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); //求行數(shù)和列數(shù)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長的域?qū)?#xff0c;setiosflags()用來設置左對齊or右對齊; cout << (c==cols-1?setw(Max):setw(Max+2)) << setiosflags(ios::left)<<s[idx]; }cout << "\n";} } return 0; }

收獲:

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

可優(yōu)化的:

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


日拱一卒,功不唐捐。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。