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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ ACM模式输入输出

發布時間:2025/3/8 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ ACM模式输入输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++ ACM模式輸入輸出

以下我們都以求和作為題目要求,來看一下各種輸入輸出應該怎么寫。

1 只有一個或幾個輸入

輸入樣例:

3 5 7

輸入輸出模板:

int main() {int a, b, c;// 接收有限個輸入cin >> a >> b >> c;// 輸出結果cout << a+b+c << endl; }

2 先給元素個數,再給元素

先給行數T,再給出T行

輸入樣例:

3 3 5 7 6 8 9 12 9 5

輸入輸出模板:

int main() {int T;vector<int> res;// 拿到輸入行數Tcin >> T;// 接收T行輸入while (T--) {int a, b, c;cin >> a >> b >> c;res.push_back(a+b+c);}// 輸出結果for (int n : res) {cout << n << endl;} }

先給數組元素個數,再給一行數組

n, m分別是接下來要給的兩個數組元素的個數,輸入樣例:

5 2 1 4 2 6 5 2 3

接收輸入代碼:

int main() {int n, m;cin >> n >> m;vector<int> nums(n);for (int i=0; i<n; ++i) cin >> nums[i];vector<int> lens(m);for (int i=0; i<m; ++i) cin >> lens[i]; }

3 多組輸入,讀到文件結束符EOF為止

不直接告知有多少組輸入,而是由EOF來判斷。

方法一

cin 讀到有數據輸入時會返回非0,而讀到文件結束符時會返回0,結束while循環。

int main() {int a, b;vector<int> res;while (cin >> a >> b) {res.push_back(a+b);} }

方法二

scanf 讀到文件結束符時會返回-1,而-1的補碼表示恰好是全1,從而用按位取反得到0,此時結束 while 循環。

int main() {int a, b;vector<int> res;while (~scanf("%d%d", &a, &b)) {res.push_back(a+b);} }

4 字符串的輸入

同樣有 cin 和 scanf 兩種方法

方法一

int main() {const int N = 100;char s[N];scanf("%s", s); }

方法二:

int main() {string s;cin >> s;cout << s << endl; }

字符串的輸入有幾點需要注意:

  • C/C++ 中讀入的字符串時包含結束符 \0 的,我們需要的字符數組的長度要比真正的字符數加一;
  • cin 和 scanf 兩種讀入方式都會忽略行首和行位的空格。

5 格式化輸入scanf

情況一

當我們面對這樣的字符串輸入:214+1352,要來計算兩數之和時,cin 就不好使了。需要我們的格式化輸入 scanf。

int main() {int a, b;scanf("%d+%d", &a, &b);cout << a+b << endl; }

情況二

如果我們會接收到一排數字,而我們想要計算其中每單個數字的和,我們也可以借助格式化輸入的 %1d 來實現,它能一位一位地讀入標準輸入:

int main() {int a;int sum = 0;while (~scanf("%1d", &a))sum += a;cout << sum << endl; }

標準化輸入函數 scanf 還有許多奇妙的用法,有興趣可以自行查閱相關資料。

6 ASCII碼

  • 可以根據 ASCII 碼的區間來判斷某個字符是數字還是大小寫字母等(比如通過與 'a'、'z'等 ASCII 碼值的大小關系)。
  • 根據數字字符的 ASCII 碼得到數字本身的值:減去 0 的 ASCII 碼 char c='3'; int a = c-'0',整型變量 a 的值為 3。
  • 7 整行讀取字符串

    當我們不確定一行中是否有空格等特殊字符,我們可以使用 getline 進行整行讀取:

    int main() {string s;getline(cin, s);cout << s << endl; }

    默認以回車作為結束,如果需要自定義,可:

    getline(cin, s, '?');

    補充知識

    string與char數組

  • char[] 在C/C++中均可用,string僅在C++中可用,且需要 #include <string>,一般稱 char[] 為 C 風格的字符串,稱 string 為 C++ 風格的字符串
  • string 通常用 cin 讀入,char[] 通常用 scanf 讀入。scanf 不可以用來讀入 string
  • char[] 構造 string:string str(s);
  • string 轉換為 char[]:s = str.c_str();
  • 一般直接 cin 讀取 string 會很慢,可以讀到 char[] 中,再構造為 string
  • printf/scanf 與 cout/cin

    在讀取數據量巨大(經驗值為大于1e5個正數以上)時,cin 會很慢,這是因為 cin/cout 需要與 scanf/printf 同步。

    解決方法:

  • 改用 scanf/printf

  • 關閉同步,改善效率(有的編譯器可行,有的無效)

    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
  • cout << endl; 除了換行之外,還會清空緩存區,而清空緩存區這件事情會耗時很久,因此為了提高速度,一般直接:cout << "\n";,會快很多

  • 保留小數位數

  • 如保留 3 位小數:printf("%.4f\n", a);, 此種方法會自動的四舍五入。
  • 一位小數四舍五入成整數:float a = 2.7; printf("%d\n", int(a+0.5));
  • Ref:

    https://www.bilibili.com/video/BV1ri4y1L7f7?from=search&seid=11052128712667700362&spm_id_from=333.337.0.0

    總結

    以上是生活随笔為你收集整理的C++ ACM模式输入输出的全部內容,希望文章能夠幫你解決所遇到的問題。

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