1. 程式人生 > >愛奇藝2018年9月15日筆試程式設計題目AC程式碼

愛奇藝2018年9月15日筆試程式設計題目AC程式碼

這幾天一直在關注著工作的事情,師兄們做筆試題,我也跟著在刷,包括華為,百度,騰訊,阿里等公司的筆試題都做了,基本上都幫助師兄拿到了面試的資格,但是因為密度太大,而自己還要整理leetcode的學習筆記,所以,很多題目沒有來得及整理,今天正好提前AC完成,就簡單分享一下愛奇藝的兩個題目。

第一個題目是,一個字串,有六個符號,符號是從字元0到字元9的任意一個數,給定一個字串後,你可以改變任意任何位置上的字元,目的是想讓前三個字元的和與後三個字元的和相等,要求改變的字元位置儘可能少。剛開始只能通過82%,主要是隻考慮一邊改變的情況,而兩邊是可以同時改變的。下面是我AC的程式碼,寫的超級簡陋,剛剛筆試完就發的部落格,有點倉促,其實可以做很多優化:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int res;
    string str = "";
    cin >> str;

    int left = str[0]+str[1]+str[2];
    int right = str[3]+str[4]+str[5];
    int dist = abs(left- right);

    if (!dist) {
        cout << dist << endl;
        return 0;
    }

    if (str[0] > str[1]) {
        swap (str[0], str[1]);
    }
    if (str[0] > str[2]) {
        swap (str[0], str[2]);
    }
    if (str[1] > str[2]) {
        swap (str[1], str[2]);
    }

    if (str[3] > str[4]) {
        swap (str[3], str[4]);
    }
    if (str[3] > str[5]) {
        swap (str[3], str[5]);
    }
    if (str[4] > str[5]) {
        swap (str[4], str[5]);
    }

    int minnums = 3;
    int nums = 0;

    int tmp = dist;
    while (tmp>0 && nums<3) {
        tmp -= ('9'-str[nums]);
        ++nums;
    }
    minnums = min(nums, minnums);

    tmp = dist;
    nums = 0;
    while (tmp>0 && nums<3) {
        tmp -= (str[2-nums]-'0');
        ++nums;
    }
    minnums = min(nums, minnums);

    tmp = dist;
    nums = 0;
    while (tmp>0 && nums<3) {
        tmp -= ('9'-str[nums+3]);
        ++nums;
    }
    minnums = min(nums, minnums);

    tmp = dist;
    nums = 0;
    while (tmp>0 && nums<3) {
        tmp -= (str[5-nums]-'0');
        ++nums;
    }
    minnums = min(nums, minnums);

    if (minnums == 3) {
        if (('9'-str[0]+str[5]-'0')>tmp || (str[3]-'0'+'9'-str[3])>tmp) {
            minnums = 2;
        }
    }

    cout << minnums << endl;
    return 0;
}

 

 第二個題目很簡單,就是說,給定一組食物,每種食物的份數告訴,一個人每天要麼吃一份食物,要麼添一份食物,最後,經過M天,給出特定的某個食物份數的排名是多少?

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    vector<int> A;
    int N = 0, M = 0, P = 0;
    cin >> N >> M >> P;

    for (int i=0; i<N; ++i) {
        int ai = 0;
        cin >> ai;
        A.push_back(ai);
    }

    for (int i=0; i<M; ++i) {
        char ab = 0;
        int num = 0;
        cin >> ab >> num;

        if (num <= N && num >= 0) {
            if (ab == 'A') {
                ++A[num-1];
            } else if (A[num-1] > 0) {
                --A[num-1];
            }
        }
    }

    int res = 1;
    for (int i=0; i<N; ++i) {
        if (i != (P-1) && A[i]>A[P-1]) {
            ++res;
        }
    }

    cout << res << endl;

    for (int i=0; i<A.size(); ++i) {
        cout << A[i] << " ";
    }
    cout << endl;
    return 0;
}