英偉達 2019校園招聘Web Services-2018.09.04

1-1.png
1-2.png
1-3.png
約瑟夫環問題

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;


/*請完成下面這個函數,實現題目要求的功能
當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^
******************************開始寫代碼******************************/
int L(int n, int m) {
    int i, res;
    int a[1001];
    int dead = 0;          //表示已經死了多少人
    int count = 0;           //num模擬沒有被殺的人的喊數
    for (i = 1; i<=n; i++){//開始時每個人都可以報數,爲了能得到最後一個人的編號,我們讓初始值爲i下標
        a[i] = i;
    }
    for (i = 1;; i++){
        if (i > n){//如果大於總人數,我們就從頭開始
            i = i%n;
        }
        if (a[i] == 0)//如果當前這個人死亡,跳過
          continue;
        if (a[i] > 0)//如果當前這個人沒有死,就報數
          count++;
        if (m == count && dead != n-1){ //如果當前這個人報的數等於k 並且沒有已經死亡n-1個人
            count = 0;
            a[i] = 0;//死亡的人置爲0
            dead++;
            //cout << i << endl;
        }else if(m == count && dead == n-1){  //如果這個人報數等於k,並且已經死了n-1個人,說明當前這個人就是最後的一個活着的了。。
            res = a[i];
            break;
        }
    }
    return res;
}
/******************************結束寫代碼******************************/


int main() {
    int res;

    int _n;
    cin >> _n;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');


    int _m;
    cin >> _m;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');



    res = L(_n, _m);
    cout << res << endl;

    return 0;

}

後兩題還沒想好,後續補
2-1.png
2-2
2-3.png

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;


/*請完成下面這個函數,實現題目要求的功能
當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^
******************************開始寫代碼******************************/
int minSwapTime(vector < int > values) {


}
/******************************結束寫代碼******************************/


int main() {
    int res;

    int _values_size = 0;
    cin >> _values_size;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
    vector<int> _values;
    int _values_item;
    for(int _values_i=0; _values_i<_values_size; _values_i++) {
        cin >> _values_item;
        cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        _values.push_back(_values_item);
    }



    res = minSwapTime(_values);
    cout << res << endl;

    return 0;

}

3-1.png
3-2.png
樣例輸入

5 5
0 0 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 0 1 1
0 0 0 0 0
2
0 4
2
4 4 

樣例輸出

8

求兩點之前最短路徑問題

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;


/*請完成下面這個函數,實現題目要求的功能
當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^
******************************開始寫代碼******************************/
int shortestDistance(vector < vector < int > > map, vector < int > start, vector < int > dest) {


}
/******************************結束寫代碼******************************/


int main() {
    int res;

    int _map_rows = 0;
    int _map_cols = 0;
    cin >> _map_rows >> _map_cols;
    vector< vector < int > > _map(_map_rows);
    for(int _map_i=0; _map_i<_map_rows; _map_i++) {
        for(int _map_j=0; _map_j<_map_cols; _map_j++) {
            int _map_tmp;
            cin >> _map_tmp;
            _map[_map_i].push_back(_map_tmp);
        }
    }
    int _start_size = 0;
    cin >> _start_size;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
    vector<int> _start;
    int _start_item;
    for(int _start_i=0; _start_i<_start_size; _start_i++) {
        cin >> _start_item;
        cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        _start.push_back(_start_item);
    }


    int _dest_size = 0;
    cin >> _dest_size;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
    vector<int> _dest;
    int _dest_item;
    for(int _dest_i=0; _dest_i<_dest_size; _dest_i++) {
        cin >> _dest_item;
        cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        _dest.push_back(_dest_item);
    }



    res = shortestDistance(_map, _start, _dest);
    cout << res << endl;

    return 0;

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