笔试10.19

摩拜单车

编程题三道

1、字符串

这里写图片描述

思路:移动A字符串,找出两个字符串不相等的位数。(前后可以填充为跟B完全一样)

void minDiff() {
    string A, B;
    getline(cin,A);
    getline(cin, B);
    int diff = B.size() - A.size();
    int minD = 100;
    for (int i = 0; i < diff+1; i++) {
        int miss = 0;
        for (int j = 0; j < A.size(); j++) {
            if (A[j] != B[j + i])
                miss++;
        }
        minD = minD > miss ? miss : minD;
    }
    cout << minD << endl;
}
2、有趣的排序

这里写图片描述

3、动态规划

这里写图片描述

void expectGift() {
    int n, m;
    cin >> n >> m;
    int* c = new int[m];//每种礼物的数量
    double expect=0;
    for (int i = 0; i < m; i++)
        cin >> c[i];
    double** prob = new double*[n];//第i人选j的概率
    for (int i = 0; i < n; i++) {
        prob[i] = new double[m];
        for (int j = 0; j < m; j++) {
            cin >> prob[i][j];
        }
    }
    vector<vector<double>> dp;//第i种礼物剩下j的概率
    for (int i = 0; i < m; i++) {
        dp.push_back(vector<double>(c[i]+1, 0.0));
        dp[i][c[i]] = 1;//初始概率为1
    }
    for (int k = 0; k < n; k++) {//每个人依次取礼物
        for (int i = 0; i < m; i++) {
            if (c[i] != 0) 
                dp[i][0] = dp[i][0] + dp[i][1] * prob[k][i];
            for (int j = 1; j < c[i]; j++)
                dp[i][j] = dp[i][j] * (1 - prob[k][i]) + dp[i][j + 1] * prob[k][i];
            dp[i][c[i]] *= 1 - prob[k][i];
        }
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j <= c[i]; j++)
            expect += dp[i][j] * (c[i] - j);
    }
    cout << setiosflags(ios::fixed)<<setprecision(1) << expect << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值