演算法競賽中的常用輸入輸出總結

Satan's Death發表於2019-01-24

有關演算法競賽中常用的輸入和輸出的一些總結(C /C++)

輸入部分

數字

1.整數

#include <cstdio>
#include <iostream>
int a;
scanf("%d", &a);
long long b;
scanf("%lld", &b);

std :: cin >> a >> b;

2.浮點數

#include <cstdio>
#include <iostream>
float a;
scanf("%f", &a);
double b;
scanf("%lf", &b);

std :: cin >> a >> b;

3.使用scanf讀入數字時,只有“域寬”附加格式說明。
4.大量輸入時應使用scanf。

字元

	#include <cstdio>
    #include <iostream>
    char c;
    scanf("%c", &c);
    c = getchar();
    c = getc(stdin);
    
    std :: cin >> c;

坑點:不同的作業系統的回車換行符是不一致的。

字串

若先讀入了數字(如測試組數),應緊getchar()來讀取換行符以避免出現無法理解的結果


    #include <cstdio>
    #include <iostream>
    char str[100];
    scanf("%s", str);//讀到非空白字元後,若再次遇到空白字元,結束字串的輸入;

但要注意,終止讀入時遇到的空格或回車還留在緩衝區


    //接上
    gets(str);//有bug,沒有指明讀取的最大字元數;讀取換行符後終止,並將換行符換為'\0';
    fgets(str, 10, stdin);//讀入9個字元,str[9]為'\0';
    
    //能讀取換行符,但不會自動替換為'\0';
    //若實際輸入小於等於10(包括回車符),則應str[strlen(str)-1] = '\0'

string類


    #include <iostream>
    #include <string>
    string s;
    std :: cin >> s;

輸入框架

未明確測試數

while(scanf("...", ...) == ...)

明確測試數

while(T--)

輸出部分

數字

C中格式字串的一般形式為: %[標誌][輸出最小寬度][.精度][長度]型別,其中方括號[]中的項為可選項。
長度:長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。

標誌格式字元 標誌意義
- 結果左對齊,右邊填空格
+ 輸出符號(正號或負號)
空格 輸出值為正時冠以空格,為負時冠以負號
# 對c,s,d,u類無影響;對o類,在輸出時加字首0;對x類,在輸出時加字首0x或者0X;對g,G 類防止尾隨0被刪除;對於所有的浮點形式,#保證了即使不跟任何數字,也列印一個小數點字元0
0 對於所有的數字格式,用前導0填充欄位寬度,若出現-標誌或者指定了精度(對於整數),忽略

float 和double輸出:


    #include <cstdio>
    float a = 1.0;
    double b = 1.0;
    printf("%f\n", a);
    printf("%f\n", b);

取整:

函式 功能
ceil 向上取整
floor 向下取整
round 四捨五入

必須確保取整引數是double型相除而不是int型
四捨五入保留兩位小數輸出n:printf("%.2f\n", n);
直接擷取保留兩位小數輸出n:printf("%.2f\n", n > 0 ? n - 0.005 : n + 0.005);

空格和換行

注意結尾是否有空格、空行;不同組的樣例對應的輸出之間是否有空格行,空了幾行。

相關文章