Plataforma: URI
Problema: 1110Enunciado:
Dada uma pilha de n cartas enumeradas de 1 até n com a carta 1 no topo e a carta n na base. A seguinte operação é ralizada enquanto tiver 2 ou mais cartas na pilha.
Jogue fora a carta do topo e mova a próxima carta (a que ficou no topo) para a base da pilha.
Sua tarefa é encontrar a sequência de cartas descartadas e a última carta remanescente.
Cada linha de entrada (com exceção da última) contém um número n ≤ 50. A última linha contém 0 e não deve ser processada. Cada número de entrada produz duas linhas de saída. A primeira linha apresenta a sequência de cartas descartadas e a segunda linha apresenta a carta remanescente.
#include <algorithm> #include <iostream> #include <vector> using namespace std; int main() { int n, indice, elemento; vector<int> restantes, descartadas; while (1) { cin >> n; if (n == 0) break; while (n > 0) restantes.insert(restantes.begin(), n--); indice = 0; while (restantes.size() > 1) { descartadas.push_back(restantes.at(indice)); restantes.erase(restantes.begin() + indice); elemento = restantes.at(indice); rotate(restantes.begin() + indice, restantes.begin() + indice + 1, restantes.end()); } cout << "Discarded cards:" ; if (descartadas.size() > 1) cout << " " << descartadas.at(0); while (++indice < descartadas.size()) cout << ", " << descartadas.at(indice); indice = 0; cout << endl << "Remaining card: "; while (indice < restantes.size()) cout << restantes.at(indice++); cout << endl; descartadas.clear(); restantes.clear(); } return 0; }
Nenhum comentário:
Postar um comentário