记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;
再对比半天,难道总数算的不对?最后终于发现阶乘越界。
真的处处是坑!!!

结语

    本来想整理完用作考前复习,结果也用不上了,后面也不打算对算法有什么研究和学习,就这样吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值