fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. //функция ниже нам понадобится дважды.
  6. int JeosifFunc(vector <int> a, unsigned int n, unsigned int m){
  7. for (unsigned int i=a.size(); i>1; i--){ //задаем цикл, который выполняется n-1 раз
  8. if (m>a.size()){
  9. m=a.size()%m-1; //m не больше n => (люди в круге, используем операцию %
  10. }
  11. a.erase (a.begin()+m-1);//=> последовательно стираем
  12. for (unsigned int i=0; i<m-1; i++){
  13. a.push_back (a[i]); // для удобства первые элементы до m продублируем вконец вектора
  14. }
  15. a.erase (a.begin(), a.begin()+m-1);//стираем всё до m
  16. for (auto el:a)
  17. cout <<el<<" ";
  18. cout <<endl;
  19. }
  20. return a[0]; //ответ будет храниться в a[0].
  21. }
  22.  
  23. int main() {
  24. bool existing = false;
  25. vector <int> a;
  26. unsigned int n, m;
  27. cin >> n >> m; //
  28. for (unsigned int i=1; i<=n; i++){ // заполняем вектор номерами от 1 до n
  29. a.push_back (i);
  30. }
  31. cout << JeosifFunc(a, n, m) << " ["; // первая часть задания на этом закончена.
  32. //подставим всевозможные m в виде k и зафиксируем k при JeosifFunc(a, n, k) = 1
  33. /*for (unsigned int k = 2; (k <= n)&&(existing == false); k++){// m>1 => k = 2
  34. if( JeosifFunc(a, n, k) == 1){ // если обнаруживается такое k, что выживает первый номер,
  35. existing = true;//выключаем цикл
  36. cout << k<< "]";// выводим k
  37. }
  38. }
  39. if (existing == false){ // если такого k не нашлось.
  40. cout << "не существует]";
  41. }*/
  42. return 0;
  43. }
Success #stdin #stdout 0s 3480KB
stdin
10 5
stdout
6 7 8 9 10 1 2 3 4 
1 2 3 4 6 7 8 9 
7 8 9 1 2 3 4 
3 4 7 8 9 1 
1 3 4 7 8 
1 3 4 7 
7 1 3 
7 1 
1 
1 [