1. 程式人生 > >【每日】1164考試排名——中級

【每日】1164考試排名——中級

如圖
一道輸入,判斷,排序,輸出題。

學到的點:

  1. 結構體vector的push_back 和sort
  2. log要用換底公式
  3. 編譯的時候直接按特定if裡的當前行可以跳過其它組資料
  4. 輸出時的iomanip 標頭檔案
I/O流常用控制符:

使用控制符時,在程式開頭加投檔案#include <iomanip> C++有兩種方法控制格式輸出:1、用格式控制符;2、用流物件的成員函式 格式控制符:

dec                                 設定基數為10

hex                                 設定基數為16

oct                                 設定基數為8
setfill(c) 設定填充字元c setprecision(n) 設定顯示小數精度為nsetw(n) 設定域寬為n個字元 setiosflags(ios::fixed) 固定的浮點顯示 setiosflags(ios::scientific) 指數表示 setiosflags(ios::left) 左對齊 setiosflags(ios::right) 右對齊 setiosflags
(ios::skipws) 忽略前導空白 setiosflags(ios::uppercase) 16進位制數大寫輸出 setiosflags(ios::lowercase) 16進位制小寫輸出

程式碼如下

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<iomanip>
#include<vector>
#include<sstream>
#include<algorithm>
#include<cmath> using namespace std; struct acm { string name; int score; int time; }; bool cmp(acm x, acm y) { if (x.score != y.score)return x.score > y.score; else return x.time < y.time; } int main() { vector<acm> a; //acm first; float m, n; cin >> m >> n; //a.push_back(first); int t = 0; string s; while (cin >> s) { acm now; now.name = s; now.time = 0; now.score = 0; for (int i = 0; i < m; i++) { string x; cin >> x; stringstream ss(x); int y; string z; ss >> y; ss >> z; //if (y < 0) now.time += -y; //if (y == 0); if (y > 0) { now.score += 1; now.time += y; int q = (int)(log(y)/log(10)) + 1,w= x.length(); if (x.length() > q) {z = x.substr(q+1, x.length() - 2); stringstream sss(z); int yy; sss >> yy; now.time += yy*n; } } } a.push_back(now); } sort(a.begin(), a.end(), cmp); for (int j = 0; j < a.size(); j++) { //cout << a[j].name << endl; cout << setw(10) << setiosflags(ios::left) << a[j].name; cout << setw(2) << a[j].score; printf("%4d\n", a[j].time); } return 0; }