ETH官方钱包

前往
大廳
主題

[OJ練習(xí)] 11530 - SMS typing (from Zero Judge)

テリ君(桃夫模式) | 2023-02-21 20:39:08 | 巴幣 4 | 人氣 292


11530(1/5)

#include <stdio.h>
#include <stdlib.h>

static int judge(char c){
    switch(c){
        case'a':
        case'd':
        case'g':
        case'j':
        case'm':
        case'p':
        case't':
        case'w':
        case' ':
            return 1;
            
        case'b':
        case'e':
        case'h':
        case'k':
        case'n':
        case'q':
        case'u':
        case'x':
            return 2;
            
        case'c':
        case'f':
        case'i':
        case'l':
        case'o':
        case'r':
        case'v':
        case'y':
            return 3;
            
        case's':
        case'z':
            return 4;
            
        default:
            return 0;
    }
}

int main(){
    int result = 0;
    int n;
    char c;
    
    scanf("%d", &n);
    for(int i = 0; i <= n; i++){
        while(scanf("%c", &c) != EOF){
            if(c == '\n') break;
            result = result + judge(c);
        }
        
        if(i != 0) printf("Case #%d: %d\n", i, result);
        result = 0;
    }

    
    return 0;
}

這題本身不難,就是算智障型手機(jī)打一行字要按幾下,
不過ZJ禁止我用fflush去阻止while迴圈去讀第一個(gè)數(shù)字,所以用這種鬼方法= =
如果不用fflush或是我這鬼方法
還有甚麼方式去阻止scanf("%c", &c)去讀test cases那個(gè)?

創(chuàng)作回應(yīng)

小小狼群
https://truth.bahamut.com.tw/s01/202302/e9dc5491125ca06430beb68859c074e5.PNG
雖然不太懂你的問題 不過你應(yīng)該是指這樣(?
在scanf後會(huì)留一個(gè)"\n"在buffer 你可以用scanf的format把它吃掉
或是保持原樣 在第五行加個(gè) getchar() 效果也是一樣ㄉ

不過你的寫法其實(shí)也沒啥問題 畢竟讀了還是要跑迴圈遍歷字串 我那樣寫也不會(huì)比較簡潔[e15]
不過通常就會(huì)用getchar了 scanf還有格式化的功能 所以就效率上來說用getchar會(huì)快一點(diǎn)
雖然也不會(huì)有題目特別卡這種時(shí)間就是ㄌ
2023-02-21 21:55:38
テリ君(桃夫模式)
好的,感謝佬
2023-02-21 22:09:18
Initial N
judge函式,可以把字元轉(zhuǎn)成數(shù)字然後用%的,就不用這麼一大串了
2023-02-21 23:40:30
テリ君(桃夫模式)
有遇到這種再來試試看ouo
2023-02-22 11:40:33

更多創(chuàng)作