笔试10.19

来源:互联网 发布:sql server 关键技术 编辑:程序博客网 时间:2024/06/06 11:03

摩拜单车

编程题三道

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;}
原创粉丝点击