記hduoj遇到的一些問題

2025

在這裏插入圖片描述
個人做法:

void searchMax(){
    char ch[100];
    while(scanf("%s",ch)!=EOF){
        char max = 'a';
        for(int i=0;i<strlen(ch);i++){
            if(ch[i]>='a'&&ch[i]<='z'){
                if(ch[i]>max) max = ch[i];
            }else{
                if(ch[i]+32>max) max = ch[i]+32;
            }
        }
        for(int i=0;i<strlen(ch);i++){
            printf("%c",ch[i]);
            if(ch[i]==max||ch[i]==(max-32)) printf("(max)");
        }
        printf("\n");
    }
}

答案是隻比較哪個字母的ascll碼大就是最大的字母,難道a比Z大嗎???個人覺得題目有待商榷

2030

在這裏插入圖片描述
該題做法基本都統一,利用漢字編碼特點進行篩選,並且是一個漢字兩個字節。

void totalChinese(){
    int n;
    scanf("%d",&n);
    getchar();
    while (n--) {
        char str[255];
        gets(str);
        int sum = 0;
        for(int i=0;i<strlen(str);i++){
            if(str[i]<0) sum++;
        }
        printf("%d\n",sum/2);
    }
}

但因爲編譯器或者系統環境問題,我在mac控制檯輸入的漢字根本統計不準確。

2039、2041、2044…

之所以將這些劃爲一類,並不是說這些題目是動態規劃或者遞推之類,而是明明思路和代碼都沒有問題就是不Accepted。
原因只在於變量類型問題,需要注意變量規模

2048

在這裏插入圖片描述
個人做法:

typedef  long long ll;
int main() {
    ll num[22];
    num[1] = 0;
    num[2] = 1;
    for(int i=3;i<=20;i++){
        num[i] = (i-1)*(num[i-1]+num[i-2]);
    }
    int c;
    scanf("%d",&c);
    while(c--){
        int n;
        scanf("%d",&n);
        int sum = 1;
        for(int i=2;i<=n;i++)
            sum *= i;
        double res = 100*num[n]/sum;
        printf("%.2lf%%\n",res);
    }
    return 0;
}

始終過不去
對比了其他人的答案,發現一個問題類型轉換丟失了精度
需要修改double res = 100.0*num[n]/sum;
再對比半天,難道總數算的不對?最後終於發現階乘越界。
真的處處是坑!!!

結語

    本來想整理完用作考前複習,結果也用不上了,後面也不打算對算法有什麼研究和學習,就這樣吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章