約瑟夫環問題
#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;
}
後兩題還沒想好,後續補
#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;
}
樣例輸入
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;
}