Share Pastebin
Guest
Public paste!

Felipe Ferreri Tonello

By: a guest | Jan 8th, 2009 | Syntax: C++ | Size: 0.91 KB | Hits: 747 | Expires: Never
Copy text to clipboard
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. struct Pessoa {
  5.         int num;
  6.         Pessoa *prox;
  7.         Pessoa(int x, Pessoa *p) {
  8.                 num = x;
  9.                 prox = p;
  10.         }
  11. };
  12.  
  13. int main(int argc, char *argv[]) {
  14.         //'a' recebe primeira pessoa criada
  15.         //e 'a' é linkado para si mesmo
  16.         //depois 'b' é criado apontado para 'a'
  17.         int N = atoi(argv[1]), M = atoi(argv[2]);
  18.         Pessoa *a = new Pessoa(1, 0);
  19.         a->prox = a;
  20.         Pessoa *b = a;
  21.  
  22.         // Aloca na memória todas as pessoas
  23.         // e 'b' recebe a última(enésima pessoa)
  24.         // pois a contagem começa pela primeira('a')
  25.         for (int i = 2; i <= N; ++i)
  26.                 b = (b->prox = new Pessoa(i, a));
  27.  
  28.         // Loop enquanto 'b' não estiver apontado
  29.         // o próximo para ele mesmo
  30.         while (b != b->prox) {
  31.                 // 'b' recebe a emésima pessoa
  32.                 for (int i = 1; i < M; ++i)
  33.                         b = b->prox;
  34.                 a = b->prox;
  35.                 b->prox = a->prox;
  36.                 delete a; // 'a' é morto =/
  37.         }
  38.  
  39.         // O sobrevivente _o/
  40.         std::cout << b->num << std::endl;
  41. }